Skip to content

docs(pm-skill): rules-only rewrite of the readings ledger, the REST table and the eight lane job descriptions - #15641

Merged
os-zhuang merged 7 commits into
mainfrom
claude/issue-15379-readings-lanes-rules-only
Sep 5, 2026
Merged

docs(pm-skill): rules-only rewrite of the readings ledger, the REST table and the eight lane job descriptions#15641
os-zhuang merged 7 commits into
mainfrom
claude/issue-15379-readings-lanes-rules-only

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Part of #15379
Fixes #15121
Fixes #15525
Fixes #14928
Fixes #15481

Rules-only rewrite of the readings ledger, the REST channel table and the eight lane job
descriptions, plus the three small references, under the house style the digest set: one rule
per line, at most 120 bytes measured with wc -c, plain Chinese with identifiers in backticks,
grouped under each file's own sections, each file opening with one pointer to the SKILL.md
section it details. Provenance dates, ruling citations, verbatim quotations, incident
post-mortems and rationale tails leave the corpus. Every rule already stated in the rewritten
SKILL.md (head 66338b6a) or in the rewritten seven references (head 6000e270) is cut
rather than repeated; the dedup was run against those two heads, not against origin/main.

946 to 874 lines across the thirteen — 72 lines out, and none of the thirteen grows. Bytes
fall further than lines do (the ledger alone 42,349 to 33,840), because most of the shrink is
narrative deleted out of multi-line bullets that then re-flow into single rule lines.

Angle-bracket placeholders are spelled as bare placeholder words in this body and in its
comments only, because the body sanitizer eats short angle-bracket fragments even inside
backticks. The files keep the original spelling.

The thirteen files

  • platform-readings.md — 397 to 359. The readings ledger: one fact per line, the platform
    behaviour plus the operational consequence a seat acts on. The five sections keep their
    subjects and their order. Every number a seat acts on stays (the 5000/hour and 15,000/hour
    ceilings, 107 points per full list_issues, the 2,000/minute GraphQL second tier, the 15-item
    timeline window, the ~9,900 pagination offset, the 15-30 minute queue landing, the six
    required check names, the 58-byte comment footer append). How each was measured does not. Four
    folded readings land here and one no-longer-reproducing reading is restated as its current
    reading (below).
  • rest-channel.md — 88 to 82. Per-operation channel ownership. The check mark keeps its
    operative meaning — this shape was executed from a gate-open seat — because two entries are
    documented-but-never-called and a reader must be able to tell them apart; its per-row dates go.
    The five non-migratable operations keep their numbering, since the readings ledger points at
    them by number. The update-branch route folded in from its own card lands on the write side.
  • release-aftercare.md — 58 to 50. The five lettered duties keep their letters. Every
    operational number stays: the 9x intra-region leg spread, the server = 33 + 23 x RTT shape,
    the 200ms gate boundary, the ~15s re-draw window, the five weeks of green health checks. The
    two-day operations log that produced them does not.
  • true-green.md — 33 to 32. Per-repo canonical invocation, the gates a CI-log grep cannot
    see, the local preflight. One fact per line per repo.
  • compile-surfaces.md — 26 to 24. Keeps its lookup table. The six surface rows are
    unchanged byte for byte, which is what keeps the widest-table-row pin at 352 as ruled; only the
    thawed row loses its two dates and the retired out-of-scope wording, and the prose around the
    table loses its measurement provenance.
  • lanes/cli.md — 31 to 29. Scope, standing promises, in-seat judgement. The
    dispatch-to-draft-PR baseline number is cut: SKILL.md's collection section already rules that
    the baseline is read from the lane's own record and is never a constant in the text.
  • lanes/devx.md — 39 to 38. Scope with the SUBJECT boundary intact, the two
    release-owned channels, the changeset split by publish surface, and the gate-self-description
    rule with its anti-no-op limb.
  • lanes/director.md — 72 to 72. The heaviest narrative in the set. The charter quotation
    becomes the authority line it grants; the supersession ledger recording which ruling moved
    which duty on which day is gone entirely, and what survives is the current allocation as
    rules. Four duties keep their numbering and every never-line.
  • lanes/engine.md — 36 to 32. Scope, the driver-conformance ledger promise, and the five
    in-seat readings including the three-independent-implementations count.
  • lanes/hotcrm.md — 57 to 53. The two charter quotations become the four rules they
    authorise: platform capability implemented upstream, the exemplar shows platform capability,
    no requirement sprawl, dual-edition compatibility. Nothing in scope moves. The changeset-flow
    tombstone (an older sentence that was false) is dropped and only the true rule kept.
  • lanes/services.md — 28 to 27. Scope with the security-boundary human floor, the
    ablation promise, the disclosure discipline, the two serialisation readings.
  • lanes/skills.md — 35 to 33. Its tier line now names tiers instead of model identifiers,
    which is where the house style and the file disagreed.
  • lanes/spec.md — 46 to 43. Scope, the in-seat split criteria, the standing promises
    including the pre-approved ledger-append class, and the branch-information test, which keeps
    its English wording because the wording is the criterion a reader tests against.

The four folded cards

Ratchet

The thirteen CEILINGS rows in scripts/pm/check-skill-line-ratchet.mjs are re-pinned down
at the landed counts (359, 82, 50, 32, 24, 29, 38, 72, 32, 53, 27, 33, 43), each with a one-line
note in the map's own convention. Nothing is raised and no other row moves. Ceilings across the
thirteen fall 956 to 874. Every MAX_TABLE_ROW_BYTES pin is untouched — the twelve zeros stay
zero because those files carry no table row, and compile-surfaces.md stays 352 because its
widest row is unchanged byte for byte.

One maintenance edit inside the declared cross-file move, and the gate's own header prescribes
it.
The move declared on platform-readings.md carries was: 314 plus two ruledRaises
records totalling 73. Lowering the destination to 359 leaves it only 45 above was, so the two
records together read as an over-claim and crossFileMoveVerdict refused them by name. The
header's remedy for exactly this is that a ruled raise since given back is spent and its record
is retired. This rewrite handed back 38 of those 73 lines, so 35 still stand and only one record
can remain. The third-increment record is retired and the intake record kept, which is the
conservative direction rather than a preference: 34 declared against 35 actually standing prices
the move at +11 for a raise that took +10, while keeping the +39 instead would price it at +6,
and under-pricing the move is the failure the header warns about. was, sources and their
pre-move ceilings are untouched, and both rulings are still quoted beside the ceiling above.

Gate line, verbatim: cross-file move into .claude/skills/pm-dispatch/references/platform-readings.md: +11 (314 to 359, less 34 lines of ordinary ruled raise) against a net source decrease of 20 (lanes/cli.md 35 to 29, lanes/services.md 30 to 27, rest-channel.md 93 to 82); authorised by the ruling this map cites.
and declared cross-file moves: 1, total ceilings down 9 lines.

Hygiene, before and after

Per file, measured on the tree: dates matching 2026-0M-DD · corner-quote characters · non-table
lines the ratchet's own scanner reports over 120 bytes.

file before after
platform-readings.md 58 · 156 · 0 0 · 0 · 0
rest-channel.md 9 · 16 · 0 0 · 0 · 0
release-aftercare.md 3 · 6 · 0 0 · 0 · 0
true-green.md 0 · 4 · 0 0 · 0 · 0
compile-surfaces.md 3 · 4 · 0 0 · 0 · 0
lanes/cli.md 0 · 4 · 0 0 · 0 · 0
lanes/devx.md 0 · 8 · 0 0 · 0 · 0
lanes/director.md 17 · 22 · 0 0 · 0 · 0
lanes/engine.md 1 · 8 · 0 0 · 0 · 0
lanes/hotcrm.md 3 · 16 · 0 0 · 0 · 0
lanes/services.md 1 · 0 · 0 0 · 0 · 0
lanes/skills.md 0 · 4 · 0 0 · 0 · 0
lanes/spec.md 3 · 4 · 0 0 · 0 · 0

The third column is 0 on both sides everywhere because the gate reports non-exempt lines, and
compile-surfaces.md's seven over-length lines are table rows while hotcrm.md's five were two
blockquote lines, two lines inside a multi-line corner-quoted ruling and one carrying a
line-anchored Blocked-by: example — all structurally exempt. Measured raw instead, ignoring the
exemptions, those twelve over-length lines are now zero in both files apart from
compile-surfaces.md's seven pinned table rows: the rewrite removed every construct the
exemptions were covering rather than leaning on them.

Also zero across all thirteen after the rewrite: warning and star glyphs, issue or PR numbers in
operational text, decision-frame fingerprint phrases, and model identifiers.

Gates run

Family derived on the tree with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack,
which read the change set from the merge base itself: 14 paths, 35 runnable commands. All 35 run,
all 35 green. Each gate's own verdict line was read; the roll-up:

gate exit its own verdict line
pnpm check:pm-skill-ratchet 0 check-skill-line-ratchet self-test: 155 cases pass. then every ceiling and pin line green
pnpm check:pm-skill-id-lint 0 check-skill-id-lint: 24 file(s) clean (pattern /#[0-9]{3,}/g).
pnpm check:skill-frame-sync 0 check-skill-frame-sync: 2 copies of the decision frame are structurally isomorphic across 2 files
pnpm check:skill-frame-freshness 0 check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now).
pnpm check:pm-governed-prose 0 check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others.
pnpm check:nul-bytes 0 check-nul-bytes: OK (scanned 7565 text file(s) … no raw ASCII control bytes).
node scripts/check-required-contexts.mjs 0 check-required-contexts: 6 required context name(s) pinned across 2 workflow(s); 5 instruction surface(s) scanned against 2 retired name(s).
pnpm check:doc-authoring 0 doc authoring guard: 394 files clean and 46 published skill files clean — no internal issue-id references.
pnpm check:pm-dispatch-gates 0 dispatch-gates self-test: 1445 cases pass.
pnpm check:ratchet-remedy-authority 0 check-ratchet-remedy-authority: 205 scripts swept …
node scripts/check-published-list-mirrors.mjs 0 OK: 1 published list mirror(s) match their constants line for line.
node scripts/check-skills-token-ratchet.mjs 0 36 authored bundle file(s) within their ceilings
the other 24 derived commands 0 each printed its own OK line; none reported a finding

Two results that are not a plain pass and are recorded as such:

  • node scripts/pm/check-governed-merges.mjs --test with the 14 paths → exit 3, which is the
    expected verdict, not a failure: governed-surface predicate: 13 of 14 path(s) hit the register (5 surfaces, repo-agnostic). / GOVERNED — a human merge is the review record for this PR /
    .claude/** x13 / paths not on the register: scripts/pm/check-skill-line-ratchet.mjs.
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions answered exit 3,
    PREREQUISITE NOT MET
    on its first attempt (@objectstack/formula not built, then
    @objectstack/lint not built) — nothing was measured, so that attempt is not counted as a
    pass. After building both through the shared verify lock it ran clean: check:doc-formula-expressions: 22 record-scoped formula example(s) across 428 files / 1371 TS blocks judged clean.

Whole-repo pnpm lint was run, not narrowed — through the repo's lock wrapper,
bash scripts/pm/os-verify-lock.sh -c 'pnpm lint', which printed
VERDICT command-exit 0 · held the lock 103s (1m43s) · waited 0s. The command it ran is the
repo's own eslint . --no-inline-config over the whole tree, so no narrowing claim is needed.

Identifier sweep. Every backticked token in the thirteen files at 6b8c67778 (436 spans) was
checked against the thirteen rewritten files (413 spans), the rewritten SKILL.md and the
rewritten seven references. Six misses were load-bearing spellings rather than narrative and were
restored inside existing lines, so no ceiling moved: the unexpanded matrix placeholder, the dev
scratch directory name, the full large-datasets pagination message, the merge-main command that
is the only fix for a stale rerun, the repository setting behind the auto-merge method read-back,
and the fully qualified spec zod path. The remaining eighteen are in Table 2.

All gate readings above were taken after the final commit, at ddf47bdd7
(git rev-parse --short HEAD), which is this PR's head.

Table 1 — every surviving rule line (part A: the twelve files other than the ledger)

671 rule lines across the thirteen (340 of them the ledger, which continues in part B, the first
comment on this PR). A rule line is one bullet or numbered entry, wrapped continuation lines
joined; the count rises while the file line count falls because the old files carried multi-line
bullets and the new ones carry one rule per line. stripped is derived mechanically by matching
each new rule against its nearest old rule and naming what the old text carried and the new one
does not: date, quotation, marker, merged (two old rules collapsed into one), narrative
(the old text was materially longer), reworded, unchanged, or new (no old rule matched — the
folded-card facts and rules split out of a longer bullet).

file # the rule as it now reads stripped
rest-channel.md 1 platform-readings.md 配额段;本表是逐操作的通道归属,动手前查一行:它有没有 REST 对应物。 merged
rest-channel.md 2 出口代理按设计只放 repo-scoped 路径(/repos/{o}/{r}/...)加 /rate_limit;org 级端点未实测。 marker + merged
rest-channel.md 3 ✓ 按席位类别限定,不是全局事实:每个 ✓ = 在一个会话门开着的席位实调通过。 date
rest-channel.md 4 会话门关着的席位本表两侧整表不可达:repo-scoped 读写全 403、gh 缺席,而 MCP 与 git 正常。 merged
rest-channel.md 5 ⇒ 先跑一条 repo-scoped 探针再选通道。 narrative
rest-channel.md 6 403 后 /rate_limit 判凭据形态:15000/时 = 凭据活被 repo-scoping 拒;60/时或 auth 错 = 无凭据。 merged
rest-channel.md 7 按班矩阵与降级梯住 platform-readings.md,⛔ 不在本表复述。 merged
rest-channel.md 8 ⛔ 未带 ✓ 的形状不当已验证事实复述。 narrative
rest-channel.md 9 ✓ 按标签/状态列卡 GET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N,labels= 是真 AND。 merged
rest-channel.md 10 ⛔ 完整性自证不跟 Link: rel="next":游标枯竭停在 102,而页号走法得 287 与 448 且与总数符。 new
rest-channel.md 11 ⇒ 改走 &page=N 到短页为止,再用 GET /repos/{o}/{r}open_issues_count 减开放 PR 核总数。 date + quotation + marker + merged
rest-channel.md 12 ⛔ 未核总数的枚举不是读数;成因未知,处方不依赖该头,⛔ 不把已修写成已解释。 new
rest-channel.md 13 关键词阳性对照结构上看不见本类:必中卡落在首页照样绿,只有计数核对逮得住。 new
rest-channel.md 14 ⛔ 查重必须含 closed:卡刚关闭时最易被重开,开域查重漏掉刚关闭的同题卡即重复派发。 date
rest-channel.md 15 开域查重是要申报的例外,不是默认;状态与标签列卡仍 state=open,那是状态读不是查重。 date
rest-channel.md 16 ✓ 卡与 PR 元数据 GET .../issues/{n} · GET .../pulls/{n},assignees、labels、body 齐全。 merged
rest-channel.md 17 MCP list_issues 永不返回 assignees,这条差别本身就是走 REST 的理由。 narrative
rest-channel.md 18 ✓ 整条评论线 GET .../issues/{n}/comments?per_page=100 merged
rest-channel.md 19 ✓ Timeline 事件 GET .../issues/{n}/timeline:cross-ref、added_to_merge_queue、ready_for_review。 merged
rest-channel.md 20 ✓ PR diff GET .../pulls/{n} 带 Accept application/vnd.github.diff;文件清单 .../pulls/{n}/files merged
rest-channel.md 21 后者可瞬态 404 ⇒ PR 文件读取优先走 git。 narrative
rest-channel.md 22 ✓ 取某 ref 上的文件 GET .../contents/{path}?ref=...,raw accept。 merged
rest-channel.md 23 ✓ 祖先与对比 GET .../compare/{base}...{head} —— 浅检出上本地祖先判据不可信时的正解。 reworded
rest-channel.md 24 ✓ 门禁与 workflow GET .../commits/{sha}/check-runs · GET .../actions/runs merged
rest-channel.md 25 ✓ 配额自读 GET /rate_limit,端点自身零计费。 reworded
rest-channel.md 26 ✓ 评论 POST .../issues/{n}/comments;改评论 PATCH .../issues/comments/{id} merged
rest-channel.md 27 ✓ 标签加法 POST .../issues/{n}/labels,定向删 DELETE .../issues/{n}/labels/{name} merged
rest-channel.md 28 加法写剥不掉并发席位刚挂的标签,比 MCP issue_write 的整组替换安全。 new
rest-channel.md 29 门关席位无此端点 ⇒ 回退 = MCP 读现值、并集、整组写、读回;读回是它安全的全部理由。 new
rest-channel.md 30 ✓ 建卡带标签 POST .../issues · 改正文 PATCH .../issues/{n} · 认领 POST .../issues/{n}/assignees merged
rest-channel.md 31 ✓ 请求复审 POST .../pulls/{n}/requested_reviewers · 开 PR POST .../pullsdraft=true merged
rest-channel.md 32 GraphQL 池为 0 的同一分钟里开得出 draft PR ⇒ 交付不必等重置。 narrative
rest-channel.md 33 ✓ 把 origin/main 合进 PR head:PUT .../pulls/{n}/update-branch,PM 席位可用。 new
rest-channel.md 34 它是零文件写的合 main 手段,产出真合并提交、不重写历史。 new
rest-channel.md 35 expected_head_sha 必须是完整 40 字符 SHA,短 SHA 回 422。 new
rest-channel.md 36 base 未动回 422 no new commits on the base branch = 无事可做,不是失败。 new
rest-channel.md 37 红窗守候规则住 platform-readings.md 配额段。 merged
rest-channel.md 38 draft 转 ready 翻转:GraphQL-only mutation;出口代理只放钉住的 PR-review GraphQL 集。 判据 = REST update-a-pull-request 只收 title/body/state/base/maintainer_can_modify,无 draft (与第 5 条同批核对官方文档,未逐个实调)。断粮出路:等 MCP 恢复,或人工点一下。 date
rest-channel.md 39 auto-merge 与入队挂载:GraphQL mutation,即 MCP enable_pr_auto_merge。 走合并队列的仓落地必经它 ⇒ 配额红窗无退路;直合仓有退路 PUT .../pulls/{n}/merge reworded
rest-channel.md 40 语义搜索:/search/* 被出口代理按设计拒绝。退路 = REST 列表端点加本地 grep。 REST 也被会话门关掉的席位 = 一次定向 MCP search_issues,⛔ 不宽表扫。 reworded
rest-channel.md 41 Projects field_values:GraphQL-only —— 舰队并不需要它;MCP 服务器端无条件抓它才是漏点。 reworded
rest-channel.md 42 issue transfer:issues 端点表无 transfer 路由 ⇒ 同为 GraphQL-only。 拿不到时当轮改走在目的仓重建配方,配方住 platform-readings.md date + quotation + merged
rest-channel.md 43 分支存在性、队列分支、判落地、squash 验证四条的拼写与边界住 platform-readings.md merged
rest-channel.md 44 本表只指路,⛔ 不在两处各存一份;先问 git,再问 REST。 narrative
rest-channel.md 45 merged_by 是入队者,⛔ 不是绕队证据:队列合并归属给入队的账户,对队列与直合零分辨力。 quotation
rest-channel.md 46 问本仓 auto-merge 是否经队列,答案来自尝试动作,不来自属性字段。 new
rest-channel.md 47 判据 ①:直接合并 PUT .../pulls/{n}/merge 在强制队列 ruleset 下回 405。 narrative
rest-channel.md 48 ②:PR 上的 added_to_merge_queue timeline 事件。③:对已入队 PR 调 update-branch 回不能更新。 quotation + merged
rest-channel.md 49 ①② 的拼写与边界住 platform-readings.md 队列段,本条只归拢判据。 merged
rest-channel.md 50 队列 required 集按 job 与 check-run 名匹配,workflow 名从不作为 check context 出现,搜也搜不到。 new
rest-channel.md 51 改任一 job 名或 test 分片矩阵的形状,必须同一笔更新队列 required 集,否则队列静默挂起。 new
rest-channel.md 52 姊妹仓 objectui 配置为 9 个:Lint · Type Check · Test (shard 1/4 … 4/4) new
rest-channel.md 53 其余三个:Build & E2E · Build Docs · Changeset Declaration new
rest-channel.md 54 ⛔ required 选择只 gate 等待、不 gate 触发:未列入的检查照跑、算力相同,红了不再挡队列。 new
rest-channel.md 55 配 required 集先排掉 push-only job:if: github.event_name == 'push' 的 job 在 merge_group 上不报到。 narrative
rest-channel.md 56 列为 required 即挂死队列;未展开的矩阵名(带字面 ${{ }} 的串)是占位符,不是真 context。 narrative
release-aftercare.md 1 landing-operations.md 的 MERGED 不是终点;本文是 tagged 发版滚上生产后车道 PM 仍欠的动作。 reworded
release-aftercare.md 2 tagged 发版滚容器,滚容器就在区域约束内重掷落位;区域约束只定边界,不定城市。 reworded
release-aftercare.md 3 同一区域内各城市每 leg 相差近 9 倍:~4ms、~17ms、~35ms 都在同一个 ENAM 内。 narrative
release-aftercare.md 4 折算用实测形状 server ≈ 33 + 23 × RTT narrative
release-aftercare.md 5 35ms/leg ≈ ~870ms/请求,落在 ≤200ms 的性能门禁外;~4ms 一档 ≈ ~120ms,门禁内有余量。 merged
release-aftercare.md 6 ⇒ 发版后必须重读落位,⛔ 不得假设它没变:上一版读到的好数字不是这一版的读数。 reworded
release-aftercare.md 7 重掷有两条反直觉物理,顺序错了读数就是废的。 reworded
release-aftercare.md 8 一、落位跟随唤醒者(WAKER)而非 locationHint:从运维者自己的机器唤醒就掷到它附近。 narrative
release-aftercare.md 9 二、测量本身污染下一次掷点:换实例中途发出的探针,自己就成了新实例的唤醒者。 reworded
release-aftercare.md 10 协议顺序不可换:rollout,运维侧零 HTTP,us-east runner 唤醒(gh workflow run keep-warm)。 narrative
release-aftercare.md 11 然后读 CF instances API 拿到城市,才开始测量。 narrative
release-aftercare.md 12 坏掷点就重掷,每次约 15s 空窗;⛔ 不为迁就一次坏掷点去动门禁阈值。 reworded
release-aftercare.md 13 发版后至少跑一条真实用户走的完整链路:登录、SSO 跳转、落地页有数据。 reworded
release-aftercare.md 14 ⛔ 不以 /health 200、部署 job 绿或合成 E2E 绿代替。 unchanged
release-aftercare.md 15 失效模式:平台 SSO 跳转对每个真实用户失败了五周,期间健康检查与 E2E 全绿。 date
release-aftercare.md 16 成因是 E2E 用邮箱密码直登,从不跑那段 token 交换。 date
release-aftercare.md 17 合成路径绕开的那一段,正是只有真实用户才会走的那一段。 narrative
release-aftercare.md 18 改任何由重放层拥有的线上状态(库里的行、配置行、绑定)之前,先答两个问题并写进卡。 reworded
release-aftercare.md 19 两问:谁重放这份状态(seed、reseed、migration、boot binder),什么时候重放。 reworded
release-aftercare.md 20 手改是止血带,重放层的修复才是真卡 —— 不立卡,修复就只活在一个人的记忆里。 reworded
release-aftercare.md 21 修好的代码必须赶在下一次重放事件之前发出去,否则事故原样重开。 narrative
release-aftercare.md 22 失效模式:一次手翻库里的认证方法行,被一次跑在修复之前的 reseed 整批翻了回去。 narrative
release-aftercare.md 23 直到修复落进 seed 本身才止住。 narrative
release-aftercare.md 24 手改同刻记录:改了哪张表哪些行、多少行、谁重放、真卡在哪。 reworded
release-aftercare.md 25 后台长跑循环(重掷、恢复轮询、灰度推进)被重启打断时,它记下的意图不是此刻的状态。 quotation
release-aftercare.md 26 恢复的第一个动作恒为重读线上真实状态,⛔ 永不从循环的最后已知意图往下接。 merged
release-aftercare.md 27 ⛔ 也不把长循环留在无人认领的后台。 narrative
release-aftercare.md 28 失效模式:一个被孤儿化的重掷循环把生产控制面停在自己掷出的最差一档上数小时。 reworded
release-aftercare.md 29 而循环留下的最后一行写着继续重掷。 quotation
release-aftercare.md 30 已合并 PR 正文里的事实断言被后来的测量证伪时,更正公开发到卡上。 reworded
release-aftercare.md 31 ⛔ 不只是自己知道,也 ⛔ 不只在下一份报告里顺带带过。 reworded
release-aftercare.md 32 已合并不等于已证实:PR 正文是当时的最好理解,卡才是事实的现居地。 reworded
release-aftercare.md 33 更正当场发到卡上,未做完的那一半因此留在原卡等人做,而不是被当成已交付。 reworded
true-green.md 1 见 SKILL.md 〈复核〉的入队资格条款(全 check 绿,非 required 子集);每仓一节,一行一事实。 quotation
true-green.md 2 每节放正典测试跑法、CI 日志 grep 看不见的门禁、本地 preflight。 reworded
true-green.md 3 与编译面清单同一维护纪律:这张表由 PR 维护,踩到新形态的那个 PR 顺手改这里。 reworded
true-green.md 4 重活(build 与 test)一律走共享验证锁入口 bash scripts/pm/os-verify-lock.sh -c 'cmd' narrative
true-green.md 5 结论读它印的 VERDICT 行,⛔ 不读裸 $?;排队语义与预算见 os-dev 定义。 narrative
true-green.md 6 该锁 Linux-only:宿主无可用 flock 时入口点不拒绝,改跑声明式 unlocked 模式。 narrative
true-green.md 7 降级写进 VERDICT 行,并印出 PR 正文该照抄的申报原文,⛔ 别另写一套措辞。 narrative
true-green.md 8 门禁族派生:node scripts/pm/dispatch-gates.mjs 不传路径,脚本自己从 merge-base 取变更集。 narrative
true-green.md 9 ⛔ 不自己 git diff 喂清单:两点差按此刻的 origin/main 求值,姊妹 PR 的文件会被算进来。 narrative
true-green.md 10 而那种误用退出码照样 0;该脚本只住本仓,喂姊妹仓路径得到的仍是本仓的门禁族。 narrative
true-green.md 11 那种答案形态完整、退出码 0、全错;--repo owner/name 申报归属可机械拒错。 narrative
true-green.md 12 正典跑法:仅仓根 pnpm test new
true-green.md 13 vitest 守卫拒绝 package 目录内的运行:那种跑法曾假绿,无关文件通过而目标用例 0 个在跑。 narrative
true-green.md 14 守卫的拒绝是保护,⛔ 不绕。 new
true-green.md 15 typecheck 脚本拼作 type-check(连字符);拼错脚本名的 pnpm --filter 匹配零脚本、退出码 0。 narrative
true-green.md 16 那是静默假绿:核对输出确实回显了脚本名再信绿。 narrative
true-green.md 17 本地 preflight preflight-workspace-dist 是 workspace 依赖的 dist 新鲜度守卫。 reworded
true-green.md 18 按其自身输出的提示跑:先建再测。 new
true-green.md 19 严格区 check-test-typecheck 的失败不以 error TS 行进 CI 日志,turbo 汇总只写 #typecheck failed。 narrative
true-green.md 20 ⇒ 要看到台账消息必须本地跑该包自己的 typecheck 脚本。 narrative
true-green.md 21 对 CI 日志 grep error TS 的阴性读数在这一族上不成立。 narrative
compile-surfaces.md 1 见 SKILL.md 〈派发〉的过滤与谓词语义条款;命中它的派发令逐面抄进本清单,PR 逐面申报。 reworded
compile-surfaces.md 2 维护纪律与复核串一并适用:这张表由 PR 维护、派发前先跑复核串重验,⛔ 不凭记忆抄。 reworded
compile-surfaces.md 3 编译面清单(行号每天在动,派发前按下方复核串重验): new
compile-surfaces.md 4 增删一面的那个 PR 顺手改这里,不留给下一次裁决重新数。 merged
compile-surfaces.md 5 触发增删的四种事件:新驱动、新求值器、某面被合并或退役、冻结状态变化。 reworded
compile-surfaces.md 6 清单会过期是必然的,清单没有维护者才是缺陷。 narrative
compile-surfaces.md 7 派发前复核一遍再抄,⛔ 不凭本表的记忆填派发令:包路径搬过家,行号更是每天在动。 marker
compile-surfaces.md 8 一条够用的复核串: new
compile-surfaces.md 9 `grep -rn 'matchesFilterCondition|buildWhereSQL|compileScopedFilterToSql' narrative
compile-surfaces.md 10 packages --include=*.ts | grep -v node_modules`。 narrative
lanes/cli.md 1 见 SKILL.md 〈座位贴协议〉;本文是本车道岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 reworded
lanes/cli.md 2 packages/cliruntimeverifyqatypespackages/restpackages/mcppackages/observabilitypackages/client*cloud-connectioncreate-objectstackpackages/adapters/*plugin-hono-serverplugin-dev unchanged
lanes/cli.md 3 红线:按落点判归属 —— 标题挂 cli 而落点在别包的卡只上报误标,⛔ 不改签。 narrative
lanes/cli.md 4 packages/spec 恒归 spec 座位。 narrative
lanes/cli.md 5 /meta 路由本体归本席,元数据格式与接受面归 domain:spec narrative
lanes/cli.md 6 PR 侧绿不等于队列侧绿;队列分支条目名、队序重建与出队滞留住 ../platform-readings.md marker
lanes/cli.md 7 dispatch-gates.mjs 只报路径推导的地板,条款②从卡内容判且优先于它。 quotation
lanes/cli.md 8 已知盲区:它不点名 pnpm lint 族 ⇒ 本车道派发令恒补一句跑 pnpm lint quotation
lanes/cli.md 9 ⛔ 永不削弱门禁:棘轮上跳是门禁在报你的改动有缺陷。 narrative
lanes/cli.md 10 规则文案里自带的逃生舱只用于它描述的那种情形。 narrative
lanes/cli.md 11 探针的 baseline 也是测量,而且是没人复查的那个 ⇒ 判据恒读命中行本身,⛔ 不读命中数。 quotation
lanes/cli.md 12 断言文本被删的探针要锚在消失的那段上:被删串的前缀在删除后仍幸存是构造使然。 quotation
lanes/cli.md 13 静默时长是发探针的门槛,永不是判死的门槛;基线自本车道实录,⛔ 不写成常数。 new
lanes/cli.md 14 分支无提交加 SendMessage 探针便宜,且能复活假死的 dev。 narrative
lanes/cli.md 15 ⛔ 永不往可能活着的 worktree 派第二个 agent。 narrative
lanes/devx.md 1 见 SKILL.md 〈座位贴协议〉;本文是本车道岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 reworded
lanes/devx.md 2 packages/lintpackages/sdui-parsercontent/docs/**apps/docsscripts/(门禁类)、.github/workflows/(门禁接线)、.githooks/examples/** 测试基建面、docker/README.md unchanged
lanes/devx.md 3 objectui 的本域面同辖:.github/scripts/、构建与发布管线、门禁工具。 narrative
lanes/devx.md 4 边界:守护 skills 的门禁脚本在 scripts/ 下时归本席,判据是被改文件的路径。 narrative
lanes/devx.md 5 SUBJECT 例外与 spec 三面切分在 SKILL.md 域车道表;.claude/workflows/ 不是 .claude/skills/ narrative
lanes/devx.md 6 范围内的文件不等于范围内的卡:归属按卡的 domain:* 判,反向亦然。 new
lanes/devx.md 7 本席卡的落点溢进他席文件面时,由此产生的人工合并等后果照单接受。 new
lanes/devx.md 8 content/docs/releases/** 是 release-owned,恰两条通道;发布页作用域只管 v16 及以后。 narrative
lanes/devx.md 9 通道一:完整性缺口逐卡批准,⛔ 不构成先例。通道二:事实错误走专用 docs-only PR。 narrative
lanes/devx.md 10 ⛔ 不做任何发布动作,含改根 version 脚本链;能点绿的门禁不等于该点绿。 reworded
lanes/devx.md 11 受管面 PR 照 SKILL.md 〈复核〉的路径分叉执行,⛔ 此处不另抄。 quotation
lanes/devx.md 12 设计如此的红门禁必须在 PR 上说明红因并声明不修。 quotation
lanes/devx.md 13 changeset 按 publish 面判:根 scripts/、docs、test-only ⇒ skip-changeset narrative
lanes/devx.md 14 落进已发布包的源 ⇒ 真 changeset。 new
lanes/devx.md 15 收窄接受集须 lint 与 spec 双侧语义登记,尤须慎重。 narrative
lanes/devx.md 16 卡片正文冻结在立卡那一刻,而本仓刻意把裁定、更正与 Blocked-by: 放在评论里。 narrative
lanes/devx.md 17 ⇒ 超过一天的卡,正文是页面上最不当前的东西;先读晚于正文的评论再判可派性。 narrative
lanes/devx.md 18 量具在共享 checkout 上会静默说谎:读内容用 git show origin/main: 带路径。 narrative
lanes/devx.md 19 跑脚本必须在自己的 worktree;复核 diff 用具名 ref,⛔ 不用 FETCH_HEAD narrative
lanes/devx.md 20 FETCH_HEAD 是共享的,会被别的 agent 的 fetch 在两条命令之间冲掉。 narrative
lanes/devx.md 21 门禁的自述必须为真:理由为假的门禁比没有门禁更坏,读者会相信某风险已被覆盖。 narrative
lanes/devx.md 22 新门禁靠故意复现伤害自证;语料已被修干净时加反空转肢,某面读不出具名 pin 即判失败。 narrative
lanes/devx.md 23 ⛔ 不让枚举静默退化成 no-op。 new
lanes/devx.md 24 派发词给出的实测值必须同时给自己重测的指令:PM 清单会错,dev 重推导是兜底。 quotation
lanes/devx.md 25 先例给的是怎么想,不是怎么改。 new
lanes/director.md 1 见 SKILL.md 〈升级与决策〉;本文是本席的岗位说明,现值状态恒在座位贴,⛔ 不迁入本文件。 reworded
lanes/director.md 2 授权面 = 由人工定期指挥,负责处理 contract-review 类别的和需要决裁的。 date + quotation
lanes/director.md 3 人工召唤,⛔ 无 Routine、无 cron、无常设舰队位。 new
lanes/director.md 4 入口:维护者说处理决裁或处理 contract-review,或 /pm-dispatch director quotation
lanes/director.md 5 召唤间隔里决策卡与审计窗口停放是设计安全态;召唤节奏即决裁与审计节奏。 quotation
lanes/director.md 6 复核放行常设归派发席席内,不因本席未被召唤而停。 new
lanes/director.md 7 档位 = CONTRACT_REVIEW_TIER,dispatch-gates 常量单源,⛔ 本文不写模型名。 quotation
lanes/director.md 8 每场开场按降档保险丝机读认定,细则见 ../contract-review.md quotation
lanes/director.md 9 不达档只做免档整理(载体盘点、批次拟稿、待您清单归集),四职停放,⛔ 不裁不清标。 quotation
lanes/director.md 10 双射 carve-out:一张 pm:seat 座位贴、四段协议照旧,与分诊席同款。 narrative
lanes/director.md 11 不占 domain:* 车道,范围按职责标签跨车道跨仓。 narrative
lanes/director.md 12 永不认领 backlog、永不写码;机械接手经派发 dev。 narrative
lanes/director.md 13 三要素:每批 5 张;每卡从业务角度讲清问题、选项与代价;每卡带四维分析加一个推荐。 quotation
lanes/director.md 14 呈报批序与写法见 ../decision-analysis.md quotation
lanes/director.md 15 四维框架单源在 SKILL.md 〈升级与决策〉,⛔ 本文不复制框架本体。 new
lanes/director.md 16 创业阶段不渐进:废弃别名与能力退役默认立即退休,无窗口、无双拼写宽限。 date
lanes/director.md 17 staged 选项仅凭具名外部用户证据才可荐。 date
lanes/director.md 18 本职是审计位,非放行链:放行常设归派发席席内复核,归属与全链见 ../contract-review.md date
lanes/director.md 19 召唤时枚举载体(卡与 PR 两侧)与近期落地的条款② PR,查复核质量与漏网。 date
lanes/director.md 20 裁决仍被尊重但非放行必要条件,⛔ 不与席内复核抢同一载体的放行动作。 new
lanes/director.md 21 非机械 CI 红交回具名读者;机械红可接手,经派发 dev 执行。 new
lanes/director.md 22 处理三分支之一,收尾 PASS 且工已完 ⇒ 跟到合并为止。 new
lanes/director.md 23 非受管 code PR 走清标即落地全链;受管面照旧 draft-only 加人工合并。 quotation
lanes/director.md 24 到合并 = 推进到就绪并点名等待,⛔ 不代维护者合并。 quotation
lanes/director.md 25 之二,大的错误 FAIL 或 REWORK ⇒ 改标签即交接:按状态机一笔 replace 转回相应工作态。 narrative
lanes/director.md 26 ⛔ 散文点名不是交接:标签才是收件箱,散文对候选查询与 sweep 全不可见。 narrative
lanes/director.md 27 之三,卡在决策卡 BLOCKED ⇒ ⛔ 不擅断:并入决裁批次,按基本原则格式与维护者讨论。 reworded
lanes/director.md 28 决策收件箱 needs-user-decision 跨仓勤务,按基本原则批呈。 date
lanes/director.md 29 一行回批即全链执行,裁后四件原子执行不再请示。 date
lanes/director.md 30 批间新到滚入下批,收件箱清零才收工;⛔ 不复活已退役的汇总 issue。 date
lanes/director.md 31 代裁通道(分诊席或本席)的硬门、置信门与人工地板见 SKILL.md 分诊座位职责,⛔ 不另抄。 quotation
lanes/director.md 32 不达档 ⇒ 通道整体跳过,卡走维护者路径,恒安全。 quotation
lanes/director.md 33 pm:awaiting-maintainer 跨仓标签是待人工动作的唯一机器载体。 quotation
lanes/director.md 34 该态 = 决定已做、只剩一次 GitHub 之外的人工动作。 quotation
lanes/director.md 35 车道席照旧只负责入态,台账与出口归本席。 quotation
lanes/director.md 36 召唤时随决裁批次呈报一份合并的待您清单;座位贴散文降为指针,标签即状态。 quotation
lanes/director.md 37 出口执行:核验动作确已发生,再摘标加证据评论同笔;出口条款见 ../state-machine.md reworded
lanes/director.md 38 检测双层、处置单席:车道轮报 sweep 只作早警,权威合并窗口在本席。 narrative
lanes/director.md 39 每场召唤实跑 check-governed-merges,--since-ref 锚上一场记录的 tips。 narrative
lanes/director.md 40 锚行住座位贴说明段;脚本零存储,自打印下一场参数,跑后新 tips 同笔记回。 narrative
lanes/director.md 41 INCOMPLETE(exit 2)照实报,⛔ 不作干净。 narrative
lanes/director.md 42 清单并入决裁批次,一行一条认定 y 或 n。 new
lanes/director.md 43 未认定条目 = 席位违规,同笔立 needs-user-decision 卡立案回滚,事后审计制。 date
lanes/director.md 44 容器 403 归因逐条走 MCP 补齐。 date
lanes/director.md 45 ⛔ 不新增标签:枚举本地树推导零 API。⛔ 无 cron,节奏与停放同授权段。 quotation
lanes/director.md 46 改 skill、指令或治理文本的工作归 skills 席。 new
lanes/director.md 47 出裁决、清复审标、清点待人工清单的勤务归本席。 new
lanes/director.md 48 契约复核的放行归派发席席内,定时轮与本席降为可选事后审计,../contract-review.md 为准。 date
lanes/director.md 49 机读保险丝照旧,不可协商。 new
lanes/engine.md 1 见 SKILL.md 〈座位贴协议〉;本文是本车道岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 reworded
lanes/engine.md 2 packages/objectql(含 SchemaRegistry)、packages/corepackages/formula (CEL、matches-filter、RLS 谓词求值)、plugin-pinyin-search(落点在编译与查询核心)。 marker + merged
lanes/engine.md 3 objectql/src/metadata-facade.ts 名字带 metadata,仍归本车道。 marker
lanes/engine.md 4 packages/metadata*(加载、注册、持久化、缓存、目录)、packages/platform-objects unchanged
lanes/engine.md 5 packages/drivers/driver-*:driver-memory、driver-mongodb、driver-sql、 driver-sqlite-wasm、driver-turso。 merged
lanes/engine.md 6 红线:改元数据格式或接受面 ⇒ domain:spec,判据是改变接受面而不是碰到 spec。 quotation
lanes/engine.md 7 /meta 路由本体在 packages/restdomain:cli;packages/services/**domain:services quotation + merged
lanes/engine.md 8 content/docs/**packages/lintdomain:devx quotation
lanes/engine.md 9 driver conformance 台账只降不升:driver 卡的派发令要求 dev 前后各读一次 covered 与 DEBT。 reworded
lanes/engine.md 10 改变契约接受或拒绝行为的卡按条款②处理,判据与档位在 SKILL.md,⛔ 不另抄。 reworded
lanes/engine.md 11 区域不等于文件:区域放行只能来自对方卡真实改动行程,有 PR 读 diff,没有就申报 UNKNOWN。 quotation
lanes/engine.md 12 做删除的卡,其行程没人能从它加了什么的名字推出。 quotation
lanes/engine.md 13 行号数小时内即腐烂,恒按符号定位。 new
lanes/engine.md 14 五个 driver 列只有约三个独立实现:sqlite-wasm 与 turso local 都继承 SqlDriver 的 filter 编译器。 merged
lanes/engine.md 15 ⇒ 把一致性表当五方佐证会高估证据;同理,单点修 SQL 家族共享 seam 即可覆盖三个 driver。 narrative
lanes/engine.md 16 元数据合并语义按键类各不相同:fields 展开、validations 与 indexes 连接、标量 last-writer-wins。 narrative
lanes/engine.md 17 ⇒ 评审 pin 时先问它没有覆盖什么。 new
lanes/engine.md 18 标量的 last-writer-wins 是重复立卡的老源头,同 seam 的第三张分歧卡优先裁类,不裁实例。 narrative
lanes/engine.md 19 元数据接受面形状的卡先问生产者在哪:答案常改变卡的范围与域标签,回分诊。 quotation
lanes/hotcrm.md 1 见 SKILL.md 〈多仓协调〉;本文是本席的岗位说明,现值状态恒在座位贴,⛔ 不迁入本文件。 reworded
lanes/hotcrm.md 2 本席为姊妹仓执行座位:在 hotcrm 仓认领、派发、复核、落地。 narrative
lanes/hotcrm.md 3 ⛔ 不产 domain:*、type 与定级,纪律全文在 SKILL.md 多仓协调规则 4。 narrative
lanes/hotcrm.md 4 objectstack-ai/hotcrm 全仓:元数据优先的 CRM 样板工程,不入 spec 依赖链。 quotation
lanes/hotcrm.md 5 应用即展品,不是功能实验场 —— 收卡第一问恒为这张卡展现哪项平台能力。 quotation
lanes/hotcrm.md 6 边界:平台相关的功能在平台中实现。 new
lanes/hotcrm.md 7 建设 hotcrm 时发现的平台能力缺口,立普通平台卡到 objectstack 或 objectui。 quotation + merged
lanes/hotcrm.md 8 那是 file-at-destination、非缝卡、待分诊;hotcrm 侧同笔挂 pm:blockedBlocked-by: 回链。 narrative
lanes/hotcrm.md 9 ⛔ 永不在 hotcrm 内绕行:绕行把平台缺口藏进样板,展品从此示范错误写法。 narrative
lanes/hotcrm.md 10 repo:hotcrm 缝标签只给真协调卡,跨仓次序即卡的实质。 narrative
lanes/hotcrm.md 11 纯 hotcrm 修复住 hotcrm 仓:issue 住在修复落地的仓。 narrative
lanes/hotcrm.md 12 半状态巡查在本仓无载体:无 half-state-patrol.yml,无 workflow 即无锚 issue。 date
lanes/hotcrm.md 13 ⇒ SKILL.md 执行座位职责的读锚第一步在此恒空,代之以手工半边。 new
lanes/hotcrm.md 14 手工半边:开新派发前整车道全交集读 open 卡。 new
lanes/hotcrm.md 15 逐张核 pm:dispatchedpm:in-review 的交付 PR 是否已合并或关闭,先处置半状态。 date
lanes/hotcrm.md 16 ⛔ 无锚不等于免检。 new
lanes/hotcrm.md 17 展现平台能力:样板演示的能力必须真实兑现,declared 等于 enforced 在展品里双倍重要。 quotation
lanes/hotcrm.md 18 展品撒谎等于教每个照抄的 AI 撒谎。 new
lanes/hotcrm.md 19 发现 declared 不等于 enforced 先问生产者在哪;生产者在平台 ⇒ 上游卡。 quotation
lanes/hotcrm.md 20 不扩散需求:创业阶段聚焦原则全额适用,四维框架的不扩散那一轴是本车道首要过滤器。 quotation
lanes/hotcrm.md 21 框架单源在 SKILL.md 〈升级与决策〉,⛔ 不另抄。 quotation
lanes/hotcrm.md 22 投机功能形状不入队:走决策箱或关 not planned;定级归分诊或维护者,本席只供证据。 quotation
lanes/hotcrm.md 23 双版本兼容:hotcrm 必须在 objectstack 社区版可运行,部署到 objectos 企业版时获得企业能力。 quotation + merged
lanes/hotcrm.md 24 操作判据:hotcrm 元数据只可依赖社区能力面,企业特性恒为增强,⛔ 永不硬依赖。 narrative
lanes/hotcrm.md 25 会 break 社区版运行的卡定义上是错范围,回分诊。 narrative
lanes/hotcrm.md 26 该仓有 changeset 流:changeset-check.yml 门住每个到 main 或 develop 的 PR。 new
lanes/hotcrm.md 27 判据是本 PR 新增的 .changeset/*.md,对 base sha 求 diff,存量不算。 new
lanes/hotcrm.md 28 两条法定豁免任选:skip-changeset 标签,或空 frontmatter 的 changeset 声明本 PR 零发布。 new
lanes/hotcrm.md 29 ⛔ 判据不是包的发布状态:该仓 private: true,门照设不误。 new
lanes/hotcrm.md 30 无发版板:标签清单无 target:* new
lanes/hotcrm.md 31 发版 = changeset version 一次消化存量,加 v*.*.* tag 触发 release.yml。 new
lanes/hotcrm.md 32 依赖是已发布的 @objectstack/* 包,逐包定版号,非 git pin。 quotation
lanes/hotcrm.md 33 ⇒ 平台侧修复必须先发版、再在此升版号才到得了展品。 quotation
lanes/hotcrm.md 34 上游卡对本道的解锁判据是已发布,不是已合并。 quotation
lanes/hotcrm.md 35 pm 状态机词表五仓统一,幂等创建在 scripts/pm/ensure-pm-labels.sh,对 hotcrm 实跑是落地步骤。 reworded
lanes/hotcrm.md 36 平台缺口卡是本席最常见的联动产出:立卡在平台仓、无 assignee、普通卡待分诊。 narrative
lanes/hotcrm.md 37 domain:* 与 type 留给分诊;催办不代裁。 narrative
lanes/hotcrm.md 38 展品价值判据:一张卡若既不展现平台能力、也不修真实缺陷,默认不做。 narrative
lanes/hotcrm.md 39 拿不准升决策箱,⛔ 不自裁。 narrative
lanes/services.md 1 见 SKILL.md 〈座位贴协议〉;本文是本车道岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 reworded
lanes/services.md 2 packages/services/*packages/connectors/*packages/triggers/*plugin-approvalsplugin-webhooksplugin-emailplugin-reportsembedder-openaiknowledge-* unchanged
lanes/services.md 3 身份侧:plugin-authplugin-securityplugin-sharingplugin-audit unchanged
lanes/services.md 4 红线:零持有 packages/spec —— 触 spec 的卡一律转 spec 座位。 narrative
lanes/services.md 5 安全与权限边界的放宽是人工地板,恒升级不代裁。 narrative
lanes/services.md 6 该边界含访问控制、认证流、RLS 与共享语义、审计留痕。 narrative
lanes/services.md 7 每条否定性 pin 都要消融验证:被禁行为放回、测试转红、报失败输出、恢复。 narrative
lanes/services.md 8 单独的绿不是证据。 new
lanes/services.md 9 安全族卡的披露纪律:复现配方不落任何公开面(卡、PR、评论)。 narrative
lanes/services.md 10 证据以抽象描述或私有通道承载。 narrative
lanes/services.md 11 认证栈版本族升级把 pnpm-workspace.yaml overrides 与 plugin-auth/** 当同一个热文件面串行。 narrative
lanes/services.md 12 旧版本族上测得的前提(兼容性、行为断言)在新族落地后逐卡重读再派,⛔ 不沿用旧读数。 narrative
lanes/services.md 13 多服务共享同一条自动化引擎或数据源 seam 时,同文件卡跨轮硬串行。 narrative
lanes/services.md 14 后一单派发前先用前一单的报告重新定价,见 SKILL.md 候选与批次的重定价条款。 narrative
lanes/skills.md 1 见 SKILL.md 〈座位贴协议〉;本文是本车道岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 reworded
lanes/skills.md 2 两个技能根:.claude/skills/**(含 pm-dispatch 本体)与 skills/**(发布目录,恒英文)。 quotation
lanes/skills.md 3 scripts/pm/** PM 循环工具;指令架构文件:根 AGENTS.md 与根 CLAUDE.md quotation
lanes/skills.md 4 受管面的治理执行文件:.github/CODEOWNERS 治理路由半边。 new
lanes/skills.md 5 同含 SUBJECT 是受管面本身的门禁与审计脚本。 new
lanes/skills.md 6 全量判据在 SKILL.md 域车道表;受管面统一定义见 SKILL.md 〈复核〉,⛔ 不另抄。 narrative
lanes/skills.md 7 QA 管理循环执行归本席;qa-run 记录是协议载体不是工作。 narrative
lanes/skills.md 8 契约复核归派发席席内、决裁勤务归项目总监席(director.md);本席保留 skill 与治理文本。 narrative
lanes/skills.md 9 四维分析先于派发与复核。 unchanged
lanes/skills.md 10 受管面 PR 恒 draft 等人合;flip 或 arm 前跑 check-governed-merges --test 带路径。 narrative
lanes/skills.md 11 轮报的受管合并审计清单带 --since 四仓实跑,⛔ 不凭记忆汇总。 narrative
lanes/skills.md 12 档位从 --tier 推导引用;pm-dispatch 根恒契约复审档;条款②闸门照现行。 narrative
lanes/skills.md 13 额度耗尽豁免的地板是默认判断档,⛔ 不再往下。 new
lanes/skills.md 14 棘轮逐行付账,⛔ re-wrap 筹行;砍点逐条核幸存,被砍内容若在别处无家,砍掉就是丢规则。 reworded
lanes/skills.md 15 首触定级每轮;决策形状 ⇒ 决策箱带四棱块,⛔ 永不自裁。 narrative
lanes/skills.md 16 唯一例外:本车道 finding 自分诊,全仓轮跳过。 narrative
lanes/skills.md 17 内部指令面中文,机器判据恒英文;认领前重读全线程;标签写 read-modify-write 加回读。 reworded
lanes/skills.md 18 QA 波次由维护者手动触发,⛔ 不自启。 unchanged
lanes/skills.md 19 技能文本改动的复核先问谁在读这一行:无具名读者的新增是 token 税。 quotation
lanes/skills.md 20 每条经验自含失效模式与边界;⛔ 操作文本不引 issue 编号,id-lint 机械强制。 quotation
lanes/skills.md 21 fold-or-serial 必答与家族派发五门在 SKILL.md 批次独立性段。 narrative
lanes/skills.md 22 本车道的 SKILL.md 热文件链是它最常命中的现场,链首认领就是答题处。 narrative
lanes/spec.md 1 见 SKILL.md 〈座位贴协议〉;本文是本车道岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 reworded
lanes/spec.md 2 packages/spec 整包唯一契约,语义、文本、机器三面同席。 date + quotation + merged
lanes/spec.md 3 含 schema 形状、contracts/**、退役行为半边、strictness 台账。 quotation + merged
lanes/spec.md 4 含 describe 与 JSDoc、墓碑散文、错误 guidance 与 alias 表。 new
lanes/spec.md 5 packages/spec/scripts/**packages/spec/docs/** quotation + merged
lanes/spec.md 6 同含围着 spec 契约转的工具链:门禁、生成器、lint 规则、报错散文、references 管线。 new
lanes/spec.md 7 一般开发工具面留 devx;packages/spec 恒归本席,不论谁需要它。 date
lanes/spec.md 8 objectui 的契约面同辖:packages/types、schema 与 $schema 语料、spec pin 耦合与契约决策卡。 narrative
lanes/spec.md 9 语义与文本按合法元数据集合变没变分:改动前过校验的输入改动后同判 ⇒ 文本面。 quotation
lanes/spec.md 10 文本面的 changeset 恒 patch,默认 sweep-first;否则语义面。 quotation
lanes/spec.md 11 任何改变接受或拒绝行为的卡,不论多小,按语义面处理,即条款②。 quotation
lanes/spec.md 12 机器面改围契约的机器,与文本面不交,⛔ 不碰 packages/spec/src/**/*.zod.ts 与 strictness 台账。 quotation
lanes/spec.md 13 产物随源走:describe 与 JSDoc 改动重生成的 references 产物归触发它的源 PR。 reworded
lanes/spec.md 14 生成物门禁重生成提交,⛔ 手改。 narrative
lanes/spec.md 15 改元数据格式或接受面的照旧归 domain:spec;/meta 路由本体在 packages/restdomain:cli narrative
lanes/spec.md 16 拿不准 FLAG 回分诊,⛔ 不自设第二套判据。 narrative
lanes/spec.md 17 档位随面走的现行表在 SKILL.md 模型分档,单源,⛔ 不另抄。 reworded
lanes/spec.md 18 findings 首触定级归分诊席,本席只供证据。 unchanged
lanes/spec.md 19 门禁强制的跨车道 ledger 追加整类预批(error-code-ledger.zod.ts),三条全中即免本席签字。 narrative
lanes/spec.md 20 ①:码的存在已在归属卡裁过。 new
lanes/spec.md 21 ②:纯增量 —— 不动 schema 形状、既有条目与 ledger 机制,只落追加方自己的包分节。 narrative
lanes/spec.md 22 ③:兜底不变 —— 条款②路径肢照命中,入队前仍过契约复核。 new
lanes/spec.md 23 出类(新 ledger 字段、重构、别道条目、准入或拒收语义)⇒ 本席卡,不论谁需要它。 narrative
lanes/spec.md 24 分支信息测试(原文不译):Does this defect give a consumer a branch it could act on differently? No ⇒ widen the existing member's comment/message; yes ⇒ new code under the pre-approved class. date
lanes/spec.md 25 待命巡逻每次做整车道全交集读:delta 有尾隙,扫描后至波次边界入队的卡谁都看不见。 narrative
lanes/spec.md 26 契约面卡的 fixture triage 必须跑消费包测试:A 包的改动可让 B 包的 fixture 反着断言。 narrative
lanes/spec.md 27 spec 内任何 sweep 都看不见它 ⇒ 派发令点名消费包测试清单,报告要有各消费包真实读数。 narrative
lanes/spec.md 28 候选卡评论必读,见 SKILL.md 候选与批次;裁决与撤销住在评论里,即使正文已是决策形状。 reworded

Table 2 — passages left out, by class and file

Everything below is content that leaves the corpus rather than being re-worded. The rule it
supported survives in the line named beside it unless the row says the rule itself was a
current-state value or a tombstone.

class file what left why
provenance date all thirteen 98 2026-0M-DD occurrences the ruling: origin narrative is not a rule
ruling citation lanes/director.md, lanes/hotcrm.md, lanes/engine.md, lanes/services.md, lanes/spec.md, compile-surfaces.md every parenthetical naming which ruling on which day set a clause the clause is the rule; who set it is not
verbatim quotation lanes/hotcrm.md the two charter blockquotes replaced by the four rules they authorise; no quoted words are a criterion here
verbatim quotation lanes/director.md the seat-authority quotation replaced by the authority line it grants
verbatim quotation rest-channel.md the required-set ruling quotation the rule (required gates waiting, not triggering) survives verbatim
supersession ledger lanes/director.md the whole handover section recording which ruling moved which duty when only the current allocation is a rule
incident narrative platform-readings.md the merge_group first-sighting counts and their positive control the rule (a count answers whether, never whether the mechanism exists) survives
incident narrative platform-readings.md the compare-read-back 3-then-1 label observation the rule (a union write owes a delayed confirmation) survives
incident narrative platform-readings.md the reviewers-only request that published a governed draft folded into the rule line as one clause
incident narrative platform-readings.md the GraphQL-exhausted-while-core-14,938 reading the rule (the two pools count separately) is stated directly
incident narrative platform-readings.md the Routine-probe discriminating reading (comment count and updated_at unmoved) the rule (a fired Routine's session has no GitHub tools) survives
incident narrative release-aftercare.md the two-day cloud operations log framing every duty and number it produced survives
current-state value platform-readings.md the per-path tier reading naming which paths mandate which tier the rule says derive it per path; a copied reading rots
current-state value lanes/cli.md the 35-50 minute dispatch-to-draft-PR baseline SKILL.md rules the baseline is read from the lane's own record and is never a constant
current-state value lanes/director.md the four-copies count of the decision frame the gate now holds two; a count in prose rots, and the rule is not to copy the frame
tombstone lanes/hotcrm.md the older no-changeset-flow sentence and its correction only the true rule is kept
tombstone platform-readings.md the retired in:comments scan hint the live rule (unlock scanning greps the body) is stated
stale reading platform-readings.md the clause-2 checker answering 403 exit 3 in a container restated as its current reading, exit 0 with and without a token, under the proxy-credentialed egress fact
marker all thirteen 31 warning and star glyphs house style
spelling not carried platform-readings.md event=pull_request (the positive control), this.error( (the truncation specimen), the compound git rev-parse … && git push … example, the full Streamable HTTP error: prefix, the API rate limit already exceeded for user ID … message, until remaining greater than threshold, GET /search/issues, claude/issue-* each is provenance, a specimen, or a spelling whose rule reads without it; the rule survives in every case
spelling not carried platform-readings.md GET /repos/{owner}/{repo}/issues/{pr}/timeline the file's own short form GET /repos/{o}/{r}/… is used throughout and carries the same route
spelling not carried platform-readings.md main/pr-{number}-{parent sha} replaced by the same shape in the file's placeholder convention
spelling not carried platform-readings.md, lanes/hotcrm.md .claude/agents/**, Blocked-by: owner/repo#N the first is a rotting tier reading; the second is spelled in the rewritten state-machine.md, which owns it
spelling not carried platform-readings.md -linked:issue, `
spelling not carried compile-surfaces.md the 48f98b0 measurement commit provenance; the file's own rule is that the line numbers rot and are re-derived

Table 3 — literal spellings kept because something machine-readable pins them

spelling where it is kept what pins it
Lint & Repo Gates, TypeScript Type Check, Test Core, Dogfood Regression Gate, Build Core, Temporal Conformance (live PG + MySQL) platform-readings.md scripts/check-required-contexts.mjs pins all six by mustName, on AGENTS.md and on the rewritten review-checklist.md. It does not scan this file (Table 4), so these are kept as the operative per-repo required set, spelled to match the pinned names
Blocked-by: platform-readings.md, lanes/hotcrm.md scripts/pm/check-half-states.mjs greps the anchored form; the ratchet's anchored exemption class names it too
Restart-when: not used in these thirteen listed for completeness: it is pinned by the same two scripts and owned by the rewritten state-machine.md
os-dev-report platform-readings.md scripts/pm/check-half-states.mjs scans for this marker on cards
needs:contract-review lanes/director.md scripts/pm/check-clause2-carriers.mjs, scripts/pm/check-half-states.mjs, scripts/pm/check-label-desc-cap.mjs and lint.yml all read this exact label
pm:queue, pm:dispatched, pm:blocked, pm:on-hold, pm:awaiting-maintainer, pm:seat, pm:in-review, finding, needs-user-decision, target: the lane files and the ledger scripts/pm/ensure-pm-labels.sh is the label vocabulary's single source and scripts/pm/check-half-states.mjs reads them
skip-changeset lanes/devx.md, lanes/hotcrm.md .github/workflows/lint.yml, pr-automation.yml, scripts/check-empty-changeset.mjs
CONTRACT_REVIEW_TIER lanes/director.md scripts/pm/dispatch-gates.mjs exports the constant; check-governed-queue-guard.mjs reads it. Naming the constant is how the file avoids naming a model
gh-readonly-queue/* platform-readings.md merge-queue-triage.yml and check-governed-queue-guard.mjs depend on the ref namespace
bash scripts/pm/os-verify-lock.sh -c true-green.md scripts/check-agent-test-spelling.mjs and scripts/check-pnpm-filter-targets.mjs read the wrapper's spelling
check-governed-merges, --since-ref, --test lanes/director.md, lanes/skills.md scripts/pm/check-governed-merges.mjs owns the flags
FILTER_LOGIC_CASES, applyHaving, matchesHaving, applyFilterCondition, buildWhereSQL, compileScopedFilterToSql, lowerAnalyticsWhere, matchesFilterCondition, checkCondition, translateFieldOperators compile-surfaces.md the file's own re-derivation grep is written against three of these names, and the table is lookup data the ruling keeps
every table row in compile-surfaces.md that file MAX_TABLE_ROW_BYTES pins its widest row at 352 with zero headroom, so the surface rows are unchanged byte for byte
the absence of #digits all thirteen scripts/pm/check-skill-id-lint.mjs, pattern /#[0-9]{3,}/g
the absence of 固定评估轴 / 条评估轴 / fixed axes / X-axis frame all thirteen scripts/check-skill-frame-sync.mjs FINGERPRINTS, which scans the whole .claude and skills trees

Table 4 — conflicts found, and the reading taken

# conflict reading taken
1 A2: lanes/hotcrm.md carried five non-table lines over 120 bytes while the ratchet passed on main, so either the rule is not enforced there or something exempted them Enforced, with exemptions. Read from EXEMPTION_CLASSES: two blockquote lines (the charter quotations), two lines inside a multi-line corner-quoted ruling (quotation), one carrying a line-anchored Blocked-by: example (anchored). The rewrite removes all five constructs, so the landed file satisfies 120 bytes with no exemption relied on
2 A3 expected true-green.md to name the two required job names and stay that way Falsified. It never named them, and INSTRUCTION_SURFACES in scripts/check-required-contexts.mjs does not list it — the scan set is AGENTS.md, review-checklist.md, spec-property-retirement/SKILL.md and two docs/ files. Left as is; the six names live in platform-readings.md, which is likewise not on the scan set, and are kept there as the operative required set rather than because a gate pins them (Table 3)
3 A4 expected the cross-file move bookkeeping to stay green when every source shrinks further, and forbade editing it Falsified, and the failure is on the destination rather than the sources. Lowering platform-readings.md to 359 leaves it 45 above was: 314 while the two ruledRaises records claim 73, which the gate refuses by name. The gate's own header prescribes the remedy — a ruled raise since given back is spent, retire its record — so one record is retired and nothing else in the declaration is touched. Which record and why is argued above; the choice errs toward over-pricing the move
4 House style says lookup data stays in tables, while twelve of the thirteen carry a MAX_TABLE_ROW_BYTES pin of 0, which reds on any table row The stricter statement wins, as member 2 read it: only compile-surfaces.md has a table and it keeps its pin at 352. The other twelve stay table-free
5 Rules-only says provenance goes, but rest-channel.md's check marks are provenance of a kind Kept, with their dates removed. The mark is not who-measured-when: it separates a route that was actually executed from two that are documented and never called, and the file's own rule (never restate an unmarked shape as verified fact) depends on the distinction
6 lanes/cli.md carried a 35-50 minute dispatch-to-draft-PR baseline, while SKILL.md's collection section rules the baseline is the lane's own record and never a constant in the text SKILL.md wins; the constant is cut and the rule now says the baseline is read from the lane's record
7 lanes/director.md said check:skill-frame-sync holds four copies of the frame; the gate's COPIES holds two A current-state value, which the lane files are ruled not to carry. Cut rather than corrected — the rule is that the frame is not copied here
8 The #15121 fact was directed at the readings-trap section, while the pre-existing union-versus-intersection line lived in the quota section The whole list_issues labels family moved to the readings-trap section, so a seat grepping labels finds one home for the semantics, the arithmetic and the correct read. The quota section keeps only the degradation-ladder step that consumes it
9 lanes/skills.md named two model identifiers in its tier line, against the house style's tiers-only rule Rewritten as tiers: the pm-dispatch root is the contract-review tier and the quota-exemption floor is the default judgement tier, which is what SKILL.md's dispatch section already rules
10 The dispatch brief's A1 baseline counts differ slightly from a re-measure on the tree (ledger 54 dates / 74 corner quotes versus 58 / 78 pairs) The re-measure is the before column, as the brief instructs; corner quotes are reported as characters here, which is why the number is double the pair count

Generated by Claude Code


Generated by Claude Code

One fact per line: the platform behaviour plus what a seat does because of
it. Numbers a seat acts on stay; how they were measured does not.

Four folded readings land here: the MCP list_issues labels array is a union
and its totalCount is the disjunction; the container GitHub egress is
proxy-credentialed; the job-log endpoint is refused by that proxy while the
check-run annotations endpoint carries the exit code; enable_pr_auto_merge
stores merge whatever was requested and the branch rule governs the landing
method. The clause-2 checker reading that no longer reproduces is restated
as its current reading rather than kept with a since-then tail.

397 -> 359 lines; 0 dates, 0 corner quotes, 0 non-table lines over 120 bytes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Per-operation channel ownership stays; the per-row provenance dates and the
measurement narrative go. The check mark keeps its operative meaning — this
shape was actually executed from a gate-open seat — because two rows are
documented-but-never-called and a reader has to be able to tell them apart.

Adds the update-branch route folded in from its own card: PUT on
pulls/{n}/update-branch is the zero-file-write way to merge origin/main into
a PR head, expected_head_sha must be the full 40-character SHA, and a base
that has not moved answers 422 with nothing to do rather than a failure.

88 -> 82 lines; 0 dates, 0 corner quotes, 0 lines over 120 bytes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
Each lane keeps scope, duties per round, hand-offs and its never-list, in
plain lines a reviewer can read. What goes: the ruling citations and their
dates, the supersession ledgers recording which ruling moved a duty when,
the charter quotations, and the incident stories behind a rule. Where a
story IS a rule's condition it survives as one clause.

No scope moves in either direction; no current-state values (the cli lane's
dispatch-to-draft-PR baseline number goes, since the main file already says
the baseline is read from the lane's own record and is never a constant).
The skills lane's tier line now names tiers instead of model identifiers.

cli 31->29, devx 39->38, director 72->72, engine 36->32, hotcrm 57->53,
services 28->27, skills 35->33, spec 46->43; every file 0 dates, 0 corner
quotes, 0 lines over 120 bytes, no decision-frame fingerprint.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
release-aftercare keeps every duty and every number a seat acts on — the
latency-to-server-time shape, the 200ms gate boundary, the waker-follows
physics and the fixed protocol order — and drops the two-day operations
log that produced them. Where a failure mode IS the rule's condition it
survives as one clause with no date.

true-green keeps the per-repo invocation, the gates a CI-log grep cannot
see and the local preflight, one fact per line.

compile-surfaces keeps its lookup table. The surface rows are unchanged
byte for byte, so the widest-table-row pin stays where it is; only the
thawed row loses its two dates and the retired in-scope wording, and the
prose around the table loses its measurement provenance.

release-aftercare 58->50, true-green 33->32, compile-surfaces 26->24.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
All thirteen fall, none rises: platform-readings 397->359, rest-channel
88->82, release-aftercare 58->50, true-green 34->32, compile-surfaces
26->24, lanes engine 40->32, services 28->27, cli 31->29, devx 39->38,
skills 35->33, spec 46->43, hotcrm 57->53, director 77->72. Every widest
table-row pin is untouched, compile-surfaces included, because its widest
row is unchanged byte for byte.

The cross-file move declared on platform-readings needed one maintenance
edit the header itself prescribes. Its destination no longer stands 73
lines above the 314 it moved from — the rewrite handed 38 of those ruled
lines back — so the two ruledRaises records together read as an over-claim
and the gate refused them. The third-increment record is retired, which is
the header's own remedy for a ruled raise since given back; the intake
record stays, so the declaration reads +11 against a net source decrease
of 20 for a move that took +10. Under-pricing the move is the failure the
header warns about, and this errs the other way. The move's `was`, its
sources and their pre-move ceilings are untouched.

Ratchet green including its 155-case self-test; check-published-list-mirrors,
check-ratchet-remedy-authority, check-skills-token-ratchet and dispatch-gates
(1445 cases) all green on the edited script.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
…und missing

Every backticked token in the thirteen old files was checked against the
thirteen new ones, the rewritten SKILL.md and the rewritten seven
references. Six of the misses were load-bearing spellings rather than
narrative, and each is restored inside an existing line so no ceiling moves:
the unexpanded matrix placeholder, the dev scratch directory name, the full
large-datasets pagination message, the merge-main command that is the only
fix for a stale rerun, the repository setting behind the auto-merge method
read-back, and the fully qualified spec zod path.

Eighteen misses stand and are listed in the PR body by reason: deliberate
tombstones, provenance the rules-only rewrite removes, spellings the
rewritten sibling files already carry, and equivalent short forms.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 5, 2026
@claude

claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

Table 1 — every surviving rule line (part B: platform-readings.md)

Continues the table in the PR body; same columns and the same mechanically derived stripped
classification. 340 rule lines.

file # the rule as it now reads stripped
platform-readings.md 1 见 SKILL.md 〈平台读数纪律〉;本表是 GitHub API 与工具行为的读数事实,操作时查阅。 quotation
platform-readings.md 2 本仓是否强制队列是仓库 ruleset 事实;grep merge_group 答的是队列内是否重跑 CI,两者独立。 date + quotation
platform-readings.md 3 缺席不构成反证:有仓 ruleset 强制而无 trigger,队列照收 PR;新仓靠实测,⛔ 不由缺席推断。 date + quotation
platform-readings.md 4 权威读数 = 合并尝试本身(回 405 Changes must be made through the merge queue)或 rulesets API。 date + quotation
platform-readings.md 5 判在不在合并队列的决断读数是 timeline 事件 added_to_merge_queue / removed_from_merge_queue reworded
platform-readings.md 6 拼写 GET /repos/{o}/{r}/issues/{pr}/timeline:可按需重查、一次调用双向答。 new
platform-readings.md 7 它分得开从未入队与入队后被踢;pull_request.enqueued webhook 推送式不可重读,只作旁证。 new
platform-readings.md 8 auto_merge 字段不只是空,是不稳定:同一 PR 一分钟内先 set 后 None,入队后又回落 off。 new
platform-readings.md 9 ⛔ 永不据它判没挂上而重挂 —— 重挂踢队重排。 new
platform-readings.md 10 成功序列读间隔不读事件名:removed_from_merge_queue 后 ~1 秒内跟 merged 是落地不是被踢。 narrative
platform-readings.md 11 真被踢是其后无 merged、几分钟后 PR 仍 open。 narrative
platform-readings.md 12 不在 origin/main 上是二义读数:在队列里等 / 没入队,两者处置相反。 new
platform-readings.md 13 ⇒ 落地检查恒两个读数:队列成员资格 和 origin/main,缺一不可。 new
platform-readings.md 14 origin/main 按内容读(grep 本 PR 的产物),⛔ 不按 head sha 祖先性、不按 merged 布尔。 new
platform-readings.md 15 队列落的是另一个提交:git merge-base --is-ancestor pr-head origin/main 对已完全合入的 PR 答 NO。 date + quotation
platform-readings.md 16 同 PR 的 list_pull_requests 会回 merged: falsemerged_at 并存 ⇒ 只读布尔即读成没合。 date + quotation
platform-readings.md 17 mergeable_state 惰性计算,unknown 不是读数 —— 挂 unknown 等于挂在可能脏的头上。 new
platform-readings.md 18 dirty 即队列入口否决(冲突对象是当前 main);draft PR 恒回 draft new
platform-readings.md 19 判头脏走零配额本地试合并:fetch PR ref 后 git merge-tree --write-tree origin/main ref new
platform-readings.md 20 它直接列出冲突文件;读数随 fetch 老化,重跑先 fetch。 new
platform-readings.md 21 它只答默认文本合并,不套 .gitattributes 的 merge driver。 new
platform-readings.md 22 ⇒ 两侧同动一条 merge=os-regen 路径时系统性低报,方向危险:报干净而真合并会停。 new
platform-readings.md 23 这类 diff 由 mergeable_state 或 scratch worktree 里的真 git merge 定夺。 new
platform-readings.md 24 入队决策点才整对象 get 一次;挂了 flip 定点到点读,⛔ 不又查又等。 new
platform-readings.md 25 状态核验用最小字段(search/list 加 fields)或等事件。 new
platform-readings.md 26 聚合读数(blocked/dirty)只作阴性筛查再定位;放行按名定向读单条 job,⛔ 不拉全表。 date + marker
platform-readings.md 27 按名定位失败才拉全表;订阅来的 check_suite.completed 是唤醒不是放行读数。 date + marker
platform-readings.md 28 转 draft 不是可靠的踢队手段:两向相反读数并存,处置按最坏走。 new
platform-readings.md 29 本仓转 draft 同时掉 auto-merge 与队列成员资格,不自动恢复,转正后重挂;姊妹仓曾保位照合。 new
platform-readings.md 30 补救:转 draft 与 disable_pr_auto_merge 都做 —— 本仓 disable 单独不踢队。 date + quotation
platform-readings.md 31 出队按队列 ref 阳性探针答不在队向,加未落地;ref 缺席只作旁证,⛔ 永不承载结论。 new
platform-readings.md 32 update_pull_request 不管传不传都发送 draft 位 ⇒ 任何调用必须显式带 draft: true new
platform-readings.md 33 reviewers/title/body/labels 的单字段调用同坑,曾把治理面 draft 发布进合并队列。 new
platform-readings.md 34 请审专用路 = REST POST /pulls/{n}/requested_reviewers,载荷只有 reviewers/team_reviewers。 new
platform-readings.md 35 它不碰 draft 位;门开席位优先走它,MCP-only 席才用 update 加显式 draft: true new
platform-readings.md 36 undraft 可用路径只有 MCP 这条:传 draft: false 落地。 new
platform-readings.md 37 裸 GraphQL 在会话内被拒,它建议的改用 REST 对 undraft 是错的。 new
platform-readings.md 38 裸 REST PATCH /pulls/{n}draft: false 回 200 而无操作 ⇒ 接口性质,池 0 只能等重置。 new
platform-readings.md 39 enable_pr_auto_merge 恒显式传 mergeMethod: "SQUASH";不传静默退回被禁的 merge-commit = 无操作。 date + quotation
platform-readings.md 40 它存的方法恒为 merge,不论请求了什么;REST auto_merge.merge_method 读回 merge new
platform-readings.md 41 仓库 allow_merge_commit:false 时同样读回 merge;无 REST 端点设该方法。 new
platform-readings.md 42 设方法的 GraphQL mutation 不服务 agent 会话 ⇒ 席位既设不了也纠不了。 new
platform-readings.md 43 它在本仓无实效:main 的合并队列规则带 merge_method: SQUASH,合并由队列执行。 new
platform-readings.md 44 ⇒ 落地方法读分支规则,⛔ 永不读 auto-merge 请求;树上每 PR 一个 squash 提交。 new
platform-readings.md 45 回显两向不可靠,空回显不等于未挂上 ⇒ ⛔ 不拿它当任何方向的证据、不为它空转。 new
platform-readings.md 46 配额枯竭时 enable_pr_auto_merge 回成功而挂载根本没发生 ⇒ 验效果,不验回应。 quotation
platform-readings.md 47 回读 auto_merge 非空本接口给不了:pull_request_readfields 枚举都无该成员。 quotation
platform-readings.md 48 效果读数 = 下列阳性探针、timeline 入队事件、最终落地;队列分支仅在场时算。 new
platform-readings.md 49 队列 ref 答 BUILD 不答成员资格:gh-readonly-queue/* 只在存在时有意义,即有 build 在跑。 new
platform-readings.md 50 ⛔ 它的缺席不是任何方向的读数。 new
platform-readings.md 51 阳性探针 ①:update_pull_request_branch 回已入队分支不能更新 = 在队。 new
platform-readings.md 52 它正常返回则顺带逼出暗冲突;它不踢已挂 PR,只是永不入队。 new
platform-readings.md 53 阳性探针 ②:merge_pull_request 回 405 Pull Request is in the merge queue = 在队。 new
platform-readings.md 54 同接口回 405 Merge commits are not allowed = 不在队,改挂 auto-merge。 new
platform-readings.md 55 ⛔ enable 与其验证之间永不插 disable:入队 webhook 乱序迟到,会撤掉真实入队。 new
platform-readings.md 56 进度读 GET /actions/runs?event=merge_group;批次分支按批内最后一个 PR 命名。 new
platform-readings.md 57 ⇒ 自己的 PR 号不在运行列表里不等于没在跑。 new
platform-readings.md 58 踢出成因两则:兄弟抢先落地 ⇒ MERGE_CONFLICT;缺批准 ⇒ 治理守卫 merge_group 腿 CI_FAILURE new
platform-readings.md 59 队列 ref 在场时还答位置:名形 …/pr-PR-PARENTPARENT 是前一条目的 tip。 new
platform-readings.md 60 从根在当前 origin/main 的那条起走父-tip 链即真实排队序;ls-remote 的字典序无意义。 new
platform-readings.md 61 该读法零配额,答 timeline 答不了的排第几;⛔ 只读现在、不重建历史。 new
platform-readings.md 62 队列踢出先认签名再决定重投:核对失败签名与已知 flaky 一致 ⇒ 原样重投。 new
platform-readings.md 63 止血修复合入后同一签名再现就不再是那条 flaky,是新问题须重新诊断,⛔ 禁反射式重投。 new
platform-readings.md 64 第三种签名:本 PR 名下没有任何 merge_group run,且批次同伴的 run 全部 success narrative
platform-readings.md 65 队列重建的连带取消不是红 ⇒ 带签名收据重投一次,收据留在 PR 上,⛔ 无收据不重投。 new
platform-readings.md 66 同一 PR 第二次被踢 ⇒ 停止重投,按签名四分支重判。 new
platform-readings.md 67 吞吐两则:合并队列落地 ≈ 每 PR 15–30 分钟且串行,⛔ 不据还没落提前判异常。 quotation
platform-readings.md 68 单容器重验证(build 加 test)并发甜点 ≈3,排批按它定上限。 quotation
platform-readings.md 69 配额按账户计,不跨席共享:各席位跑在不同 GitHub 账户下。 new
platform-readings.md 70 所有 agent 共用一个身份只在席位内部成立,故认领必须在评论里写 session ID。 new
platform-readings.md 71 ⛔ 不据限流报文里的 user ID 推池子跨席共用;本席额度完全由本席做法决定。 new
platform-readings.md 72 计费按查询复杂度、按节点数,不按调用次数 ⇒ 优化方向是每次少拿,不是少调用。 new
platform-readings.md 73 读数:上限 5000/时;一次 list_issues(34 张卡、perPage=100)= 107 点。 new
platform-readings.md 74 单个 dev 子代理 ~15 分钟烧 ~5658 点 ⇒ 最大消耗方是 dev 子代理,PM 巡检是噪声。 new
platform-readings.md 75 perPage 按预期 population 取,⛔ 不按习惯取 100:点数 ≈ 请求节点数除以 100。 date
platform-readings.md 76 只要 totalCount 的健康指标取 perPage=1;只要最近 N 张就取 N。 date
platform-readings.md 77 小时池之外还有分钟级二级限流:GraphQL 端点 2,000 点/分、并发 ≤100。 date
platform-readings.md 78 官方指引:变更类请求间停 ~1 秒,mutation 按 5 倍计;批量写因此 ~1 秒一发。 date
platform-readings.md 79 双载体清标、批量重分诊这类把写挤在同一秒的扫动,会在小时池仍绿时撞上分钟墙。 date
platform-readings.md 80 REST 可达性是会话属性(GitHub App 会话门),⛔ 不是端点或席位类型的属性。 new
platform-readings.md 81 开轮探一次、按班存档;探针必须是一条真 repo-scoped 读。 new
platform-readings.md 82 门关着时 repo-scoped 路径整类回 403 GitHub access is not enabled for this session new
platform-readings.md 83 那不是限流,重试无用;403 对具体端点零分辨力。 new
platform-readings.md 84 /rate_limit 照答 200,兼任不了探针;403 后凭据形态判别见 rest-channel.md new
platform-readings.md 85 门态逐会话变,同窗顶层席可分裂成两 403 一 200 ⇒ ⛔ 不据他席、他日读数推本席。 new
platform-readings.md 86 门开会话实测通道宽于标签:issue POST 201、评论写、卡与评论读同通,加法 POST 200。 new
platform-readings.md 87 门关着时的降级梯 ①:git 先行,走下方零成本等价物。 new
platform-readings.md 88 降级梯 ②:公开仓 payload 档。③:MCP —— search 定向一击、单标签读全加求交。④:等重置。 new
platform-readings.md 89 CCR 容器的 GitHub 出口是代理加凭据的:无 header 的 REST 读回 200 带会话身份,core 上限 15000。 new
platform-readings.md 90 调用方自带的 Authorization 头被代理覆盖;HTTPS_PROXY 端口打死也不切断网络。 new
platform-readings.md 91 ⇒ 容器内得出的 token 作用域结论 ⛔ 不迁移到出口未经代理的会话。 new
platform-readings.md 92 同因:check-clause2-carriers.mjs --pair 在容器内带与不带 token 都 exit 0,不再是 403 退 3。 new
platform-readings.md 93 两通道的信封在配额、权限、传输三样上都不同 ⇒ 任一侧的拒绝只是那一侧的读数。 new
platform-readings.md 94 限流、403、传输失败都要试过另一侧才说得出我没手段。 new
platform-readings.md 95 读数:POST /actions/runs/{id}/rerun-failed-jobs REST 回 403 而 MCP 回 201。 date + quotation
platform-readings.md 96 job 日志只有 MCP 取得回,REST 侧转 blob 存储 http=000;同分钟 MCP 限流而 REST core 满 15000。 date + quotation
platform-readings.md 97 ⇒ MCP 限流先探 REST 再定退避,⛔ 不据一侧限流把整个平台的写都停掉。 new
platform-readings.md 98 REST 档以本班 repo-scoped 探针绿为前提;403 会话改按降级梯读。 new
platform-readings.md 99 容器 curl 的 REST 通道 = App installation token,core 15,000/时,与 GraphQL 池独立计。 new
platform-readings.md 100 GraphQL 池 5000/时,只留给没有 REST 对应物的几件。 new
platform-readings.md 101 那几件 = draft 翻转、auto-merge 挂载、语义 /search/*、Projects field_values、issue transfer new
platform-readings.md 102 逐操作通道归属、写侧配方与队列路由三读法见 rest-channel.md,⛔ 不在本表复述。 new
platform-readings.md 103 MCP list/search 家族整个走 GraphQL 稀缺池,issue_write 连查找半边都吃。 narrative
platform-readings.md 104 配额红时认领类动作排队,评论走 REST 桶先行把结论发出去。 narrative
platform-readings.md 105 gh CLI 的动词按传输分两桶,池枯竭时只死一半。 new
platform-readings.md 106 porcelain 家族(gh issue view / gh pr list)与 gh pr create 走 GraphQL,当场回限流。 date + marker
platform-readings.md 107 同批事实改走 gh api 的 REST 路径照常返回,含开 draft PR;容器无 gh,本条只对本机席适用。 date + marker
platform-readings.md 108 红窗调度:守候只给上面那几件 GraphQL-only 的,⛔ 其余一切不为配额空等。 narrative
platform-readings.md 109 走队列的仓落地必经 auto-merge ⇒ 红窗里无退路;直合仓有,合并本身有 REST 端点。 narrative
platform-readings.md 110 MCP 侧限流下,draft 翻转与 auto-merge 挂载整窗不可得。 new
platform-readings.md 111 被挡住的翻转是在等窗口,不是关于该 PR 的信号 ⇒ ⛔ 不据它重挂、不据它改判状态。 new
platform-readings.md 112 其余动作(评论、标签、请审、读、timeline)照常走 REST。 new
platform-readings.md 113 报文里的 user ID 只是报文:据它推 MCP 池跨席共享与本节首条冲突,⛔ 未裁不写成事实。 new
platform-readings.md 114 issue transfer 因配额或权限拿不到 ⇒ 当轮改走多仓协调条款的在目的仓重建配方。 quotation
platform-readings.md 115 该配方 = 出处头加裸 #N 改全名加关源单为 moved:纯 REST、配额免疫,⛔ 不为它空等重置。 quotation
platform-readings.md 116 两个瘦身参数都不省池。fields 省载荷:MCP list/search 服务器端无条件抓 Project field_values。 new
platform-readings.md 117 ⇒ 池枯竭时最小字段请求同样全体失败,报错串是 failed to fetch issue field values。 new
platform-readings.md 118 minimal_output: true 不裁 list_issuesbody,⛔ 永不当省额度手段写进任何 skill。 date + quotation + marker
platform-readings.md 119 没有参数能关掉 body:要么整表 107 点,要么换窄接口(点数未测)。 new
platform-readings.md 120 站得住的证据是直接观察 body 在,不是前后体积对比 —— 两次调用之间 population 已变。 new
platform-readings.md 121 git 先行:本地检出、git logls-remote 不花配额,断粮期分支存在性检查照常可用。 new
platform-readings.md 122 PR 文件读取同走 git:REST PR files 端点可瞬态 404。 new
platform-readings.md 123 零成本等价物 ①:合并队列 git ls-remote origin 'refs/heads/gh-readonly-queue/*' new
platform-readings.md 124 ②:是否落地 git log --format='%H %s' -40 origin/main 按 PR 号 grep。 new
platform-readings.md 125 ③:squash 验证 git rev-list --parents -n1 数父提交。④:git ls-remote origin 'refs/heads/*key*' new
platform-readings.md 126 开轮先读配额:curl 带 Bearer $GH_TOKEN/rate_limit,免费。 new
platform-readings.md 127 它答不了通道在不在,repo-scoped 探针另跑;graphql remaining less than 1000 ⇒ 本轮走 git 加 REST。 new
platform-readings.md 128 中途撞限流的 dev 完不成强制查重,只能把发现交回 PM 代为归档,⛔ 不盲目开卡。 new
platform-readings.md 129 打满时待执行写排成有序清单挂进巡逻词,不靠记忆;恢复窗口按序连清。 new
platform-readings.md 130 重试对齐整点(REST core 整点重置)优于指数退避,⛔ 绝不忙轮询。 new
platform-readings.md 131 文档载明未实测:条件请求答 304 不计 core 池。 new
platform-readings.md 132 公开仓零配额读法两档,payload 档优先 —— 只有 body 精确。 new
platform-readings.md 133 单卡页 /issues/N 内嵌 JSON 载原始 body:取含 bodyHTMLscript[type="application/json"] 块。 new
platform-readings.md 134 payload.preloadedQueries[0].result.data.repository.issue.bodyfrontTimelineItems/backTimelineItems date + marker
platform-readings.md 135 评论表与标量字段都不可信:时间线只渲染前 15 项且 hasNextPage: true new
platform-readings.md 136 assignees 实测为陈旧空值而权威读非空;labels/state 由此存疑、未实测,⛔ 不写成已测。 new
platform-readings.md 137 ⇒ ⛔ 认领承载字段(assigneespm:* 标签、state)永不从本档读。 new
platform-readings.md 138 ⛔ 本档的缺席不是读数:要么 hasNextPage: false,要么第二通道。 new
platform-readings.md 139 自己刚写的按原写入通道回读;失效方向是空转与重发。 new
platform-readings.md 140 成因:本档经 CDN 缓存,专对最新内容失效且绕不掉,cache-busting 查询串与 no-cache 头都无效。 date + quotation + marker
platform-readings.md 141 内容可滞后数分钟到数十分钟;它没有位置性对照 —— 更早内容全在,只有最新几条缺席。 new
platform-readings.md 142 ⇒ 前 15 项那条判别式在此不成立,唯一出路是第二通道。 new
platform-readings.md 143 失效方向是据它对别人的工作下没有认领的判词。 new
platform-readings.md 144 边界:⛔ 只因仓库公开成立;⛔ 覆盖单卡读、不覆盖 issue search,搜索页无 SSR 结果。 new
platform-readings.md 145 ⛔ 永不拿渲染列表定规模:静默只显一页。渲染层 WebFetch 仍在,~15 分缓存、有损。 new
platform-readings.md 146 查重先 search_issues,并按它的契约拼:它是语义匹配器。 new
platform-readings.md 147 query 里永不放 GitHub 限定符(repo: / is: / label: / in:title),范围走 owner/repo 参数。 date + quotation
platform-readings.md 148 query 写成描述缺陷的句子;限定符形回 total_count: 0incomplete_results: false date + quotation
platform-readings.md 149 同一意图换文档形则命中,首条即目标;body 文本匹配是 repo-scoped list 做不到的。 new
platform-readings.md 150 list 加本地扫描是确定性回退,⛔ 不是默认。 new
platform-readings.md 151 search_issues 可整会话静默归零,控制词一并归零 —— 故障是会话级,同刻别的会话正常。 new
platform-readings.md 152 ⛔ 空查重结果不是读数,除非本会话内一个已知必中的控制词答了命中。 new
platform-readings.md 153 ⛔ 不是可疑时才验:归零下空结果与真无重复逐字节同形,读作搜过了没有。 new
platform-readings.md 154 后果是重复卡照开、空车道照停;控制词回 0 ⇒ 本会话 search 已坏,立刻换通道,⛔ 不重试。 new
platform-readings.md 155 换道:探针绿走 REST 列表端点 GET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N new
platform-readings.md 156 它走 core 桶且 labels 是真 AND;⛔ 完整性自证靠 &page=N 加总数核对。 new
platform-readings.md 157 翻页在偏移 ~9,900 硬拒:422 Pagination with the page parameter is not supported for large datasets。 new
platform-readings.md 158 该拒绝与规模、per_page 无关:小结果集同样在 page=100 拒,per_page=1 拒在 page=9000 new
platform-readings.md 159 ⇒ 总体超过它就按 sort=created 拆成 ascdesc 两趟、各 ≤99 页。 new
platform-readings.md 160 created 序承重:新卡只追加到尾,页不在脚下重排。 new
platform-readings.md 161 以两趟的重叠证覆盖、对号码线闭合、缺号逐个直取核实。 new
platform-readings.md 162 403 走降级梯 MCP 档:单标签读全加本地求交;⛔ 不是翻页手扫,不完整枚举比零结果更险。 new
platform-readings.md 163 会话代理只服务 repo-scoped 路径,/search/* 的 403 体解析成净零。 new
platform-readings.md 164 代理回 403 加体 sessions are bound to their configured repositories,而那是合法 JSON。 date + marker
platform-readings.md 165 total_count 得 None、打印成 total: None,与真空集只差一个字符,而请求根本没跑。 date + marker
platform-readings.md 166 /search 类问题的仪器是 MCP search 工具,repo-scoped 枚举不受影响。 new
platform-readings.md 167 推论:阳性对照先跑 —— 合乎预期的零是永不复检的那个。 new
platform-readings.md 168 search_issues 不可靠地返回分钟级新卡:同轮发现的查重另按创建时间列近期 issue。 date
platform-readings.md 169 拼写 list_issuesorderBy: CREATED_AT;断言只到可能漏分钟级。 date
platform-readings.md 170 自由文本的否定在 search_pull_requests 静默失效:引号短语前的减号被丢弃。 new
platform-readings.md 171 -"Part of""Part of" 回同一 total_count,而两者相加不等于未过滤总体,故不是任何分层。 new
platform-readings.md 172 同查询的限定符半边照常精确(linked:issue 与其补集之和等于总体)。 new
platform-readings.md 173 ⇒ 一次调用里限定符半边算术正确、文本半边静默胡说;文本分层必跑补集与总体求和。 new
platform-readings.md 174 会话中途轮换凭据把 GitHub MCP 服务器杀到不可恢复:其后 mcp__github__* 全回 invalid session。 narrative
platform-readings.md 175 只有新会话重绑 ⇒ 轮换前提醒维护者:在飞席位丢整条 GitHub 通道。 narrative
platform-readings.md 176 配额池按身份计,换身份即清零燃烧,共享身份结构不变。 new
platform-readings.md 177 组织侧授权变更后仓库访问逐步传播,同一端点数分钟内 403 转 200。 new
platform-readings.md 178 该 403 体解析成净零 ⇒ 空车道先对 open_issues_count 反查再信,零命中纪律覆盖 list 读。 date
platform-readings.md 179 满页首页零命中是截断不是缺席:GET /branches?per_page=100 回满 100 行无目标 ⇒ 翻完再判。 date
platform-readings.md 180 issue_writelabels 是整组替换不是追加:同一动作内重读现值合并再写。 new
platform-readings.md 181 隔轮旧读数是无效快照,按其回写静默剥别的标签;真追加走 REST POST /issues/{n}/labels new
platform-readings.md 182 追加端点同样先过探针:403 会话没有真追加通道,只能整组替换。 new
platform-readings.md 183 摘标签也没有加法端点:finding 定级这类只能整组写,carve-out 保留;写后照纪律回读。 new
platform-readings.md 184 PR 标签的三条读腿全盲、两条静默。 new
platform-readings.md 185 腿 ①:issue_read get_labels 传 PR 号回 Could not resolve to an Issue。 new
platform-readings.md 186 REST 的 PR 也是 issue 惯例在此方法不成立;响亮失败即路由信号,改走腿 ③。 new
platform-readings.md 187 腿 ②:pull_request_read getlabels 时缺时滞,可整字段缺席;连盲都不稳定,更险。 new
platform-readings.md 188 腿 ③:payload 档 —— issue 页的 href 锚点 grep(/labels/NAME)在 PR 页命中零。 new
platform-readings.md 189 PR 侧拼写是 data-name="NAME",片链到 issues?q=…label%3A… new
platform-readings.md 190 ⇒ ⛔ 读成功而标签空或缺席不读作没有标签:按 data-name= 确认,否则整集作 UNKNOWN。 new
platform-readings.md 191 可达时优先加法端点;⛔ 单读与单次即时读回都不决断。 new
platform-readings.md 192 ⇒ union-write 欠一次延迟确认;必需标签(如 skip-changeset)其后每次触碰重核。 new
platform-readings.md 193 list_issues 永不返回 assignees:fields 枚举无此成员,不传也没有。 narrative
platform-readings.md 194 已认领卡与空闲卡响应逐字节相同,清单只是候选名单 ⇒ 认领前必须过完整 issue_read narrative
platform-readings.md 195 MCP issue_read 的 body 实体转义是纯读侧伪影,撇号与引号与尖括号成数字实体,comments 原样。 quotation + marker
platform-readings.md 196 存储体是明文,先解码实体再写回往返安全;腐蚀 body 的恰是把转义读数原样回写。 new
platform-readings.md 197 读侧并非一律可逆:行内反引号里的尖括号片段被 MCP 读路径整个丢弃,非转义,无从解码。 new
platform-readings.md 198 写侧剥除是真实存储损耗,⛔ 两类不并成一条,写后回读必做;实体归属与 &amp; 类未实测。 new
platform-readings.md 199 Blocked-by: 行归 BODY,是单通道反向索引:追加按解码后写回执行。 new
platform-readings.md 200 历史上寄放在评论里的行按同程序增量回填,⛔ 不搞批量突击。 new
platform-readings.md 201 解锁扫描只 grep body,⛔ 不加常设评论读;扫描走 list_issuesissue_read 直读。 quotation + marker
platform-readings.md 202 动手前按空的行内代码跨度判 MCP 读可用否;命中即改从原始体取,⛔ 不拿有损读数回写。 new
platform-readings.md 203 list_issue_types 对本集成 403 而 issue_write type: 正常,是读权限缺口。 quotation
platform-readings.md 204 ⇒ 直接写已知好值(Bug/Feature/Task),写侧报错才是真信号;列表 403 不等于类型不可用。 quotation
platform-readings.md 205 非法值是响错还是静默丢弃未实测,写非已知值前先小样验证。 quotation
platform-readings.md 206 MCP list_issueslabels 数组是并集:多标签 totalCount 是析取的规模,恒 ≥ 各单标签。 new
platform-readings.md 207 ⛔ 永不读作交集;判据 = 结果比任一输入都宽:两标签的交集回 135 张而一道只有 132 张。 new
platform-readings.md 208 正典解法:逐标签单独计数,按容斥推交集;负数或不合理的隐含交集 = 模型坏了。 new
platform-readings.md 209 结果良构、失效全静默,混入别车道同状态卡与本车道全状态卡。 new
platform-readings.md 210 正确读法 = 整车道单标签一次读全加本地对 labels 求交,或改走 REST。 new
platform-readings.md 211 两个通道的 labels 语义相反:REST 列表端点的 labels=a,b 是真 AND ⇒ ⛔ 不无条件改走 REST。 new
platform-readings.md 212 被拦的下载不是缺席证明:出口策略 403 只说取不来,不说没有,先找产物再下结论。 quotation
platform-readings.md 213 读数:Chromium 预装、PLAYWRIGHT_BROWSERS_PATH 已设,而 cdn.playwright.dev 回 403。 quotation
platform-readings.md 214 读数五坑 ①:cd X && cmd 短路 —— 路径不存在时命令在当前仓执行,跨仓恒 git -C path new
platform-readings.md 215 ②:git grep -c pat | wc -l 数的是文件数不是命中数。 new
platform-readings.md 216 ③:裸名 grep 被幸存家族当子串命中 —— 退役核验带引号精确名。 new
platform-readings.md 217 更硬判据是查声明式 ^(export )?(const|type|interface) Name\b 而非查提及。 new
platform-readings.md 218 ④:浅检出上的历史读数不可信 —— merge-base --is-ancestor 假非祖先、rev-list --count 截断。 new
platform-readings.md 219 同族 branch -r --contains 零输出;先 --deepen 再判,或走 REST compare new
platform-readings.md 220 ⑤:容器里没有 gh,于是 gh … || echo "none" 是不可证伪的否定。 new
platform-readings.md 221 127 命令不存在与 grep 没命中输出同值 ⇒ 回退分支照打印安心结论而一次都没检查。 new
platform-readings.md 222 安全拼写:先 command -v cmd 确认存在,或在 || 之前捕获状态。 new
platform-readings.md 223 ⛔ 一般规则:任何可能不存在的命令上挂回退都是不可证伪的否定。 new
platform-readings.md 224 PR 与查重类核验改走 MCP GitHub 工具或 git。 new
platform-readings.md 225 auto 档判定随命令形状变,不随能力变 ⇒ 被拒的复合命令拆成裸动作重试再报 blocked。 date
platform-readings.md 226 读数:带链接与管道的 git push 被拒,裸 git push origin 分支 放行,拒绝文案不点名元素。 date
platform-readings.md 227 判定跨天翻面 ⇒ ⛔ 一次拒绝不是能力边界;permissions.allow 条目才是仓库侧确定性通道。 date
platform-readings.md 228 rerun_failed_jobs 复用原 run 的提交与合并 ref,不拿新 main 重算。 narrative
platform-readings.md 229 ⇒ 基上缺已合修复时重跑无效,只能 git merge origin/main 推提交;判别看修复合并时间。 narrative
platform-readings.md 230 同一 head 上轻量兄弟 workflow success 加重量级载体 cancelled 是普通取代的预期签名。 quotation
platform-readings.md 231 cancel-in-progress 窗口只罩得住慢载体 ⇒ 先比对 run head_sha 与 PR 当前 head,不开调查。 quotation
platform-readings.md 232 CI 红了先取完整日志归档再下结论:断言文本只在归档里,直读工具拿不到。 new
platform-readings.md 233 get_check_run 对本仓 CI job 回空 output.text new
platform-readings.md 234 get_job_logs 无论 tail_lines 只回占满日志尾部的 post-step service-container teardown。 new
platform-readings.md 235 ⇒ 两者都答不了到底挂在哪;GET /actions/jobs/{id}/logs 被出口代理拒绝,CONNECT 403。 new
platform-readings.md 236 失败 step 名免下载即得:actions_get method=get_workflow_job new
platform-readings.md 237 check-run annotations 端点带退出码与失败命令,是免归档的第二条便宜读。 new
platform-readings.md 238 真实断言文本走 run 日志归档:actions_get method=get_workflow_run_logs_url 后下载解压。 new
platform-readings.md 239 分步文件在 {Job name}/{step number}_{step name}.txt new
platform-readings.md 240 completeness check 绿只断言没有 worker 静默死,不等于测试通过。 new
platform-readings.md 241 并发输出的相邻不等于因果:先查 turbo.json 依赖边,⛔ 不只看 tail。 new
platform-readings.md 242 公开发出的诊断被推翻时,更正发在同样公开的位置,据它开的 PR 撤回 draft、解绑 Fixes new
platform-readings.md 243 判正文被截断必须双读取:.body 原文,加 Accept: application/vnd.github.full+json.body_html new
platform-readings.md 244 两者同一处断掉才算 issue 端截断。 new
platform-readings.md 245 读侧有确定性触发:正文含字面 script 开标记形状 token 时,API 与 MCP 读回在该处静默截断。 new
platform-readings.md 246 doctype 开标记与 object 标签形状同触发;网页全文完好,⛔ 不修复只在 API 读短的卡。 new
platform-readings.md 247 同坑第三条读路径:MCP issue_read 与 PR 读路径把行内反引号里的尖括号片段整个吃掉。 new
platform-readings.md 248 GitHub 存储字节完好,raw REST 取回一字不差。 new
platform-readings.md 249 ⇒ ⛔ 永不单凭 MCP 读判截断,先取 raw REST 或 WebFetch 渲染页核对再判。 new
platform-readings.md 250 否则 repair-first 被正确地应用到完好的卡上,重写毁掉的是正确内容。 new
platform-readings.md 251 判据 = 数空的行内代码跨度:一个空跨度恰是短尖括号片段被吃掉的签名。 new
platform-readings.md 252 判据是尖括号不是反引号:有的正文本来就把标识符不带尖括号写。 new
platform-readings.md 253 数字实体(如撇号成 &#39;)是普通实体编码,不是截断证据。 new
platform-readings.md 254 写侧 sanitizer 作者规则住 AGENTS.md 的 GitHub mutates body BYTES 段,⛔ 不在本表复述。 quotation
platform-readings.md 255 本表只补两条:要字面尖括号写实体 &lt; / &gt; quotation
platform-readings.md 256 裸标识符(无尖括号)存活 ⇒ SKILL 提取契约(字面文本 grep 加裸标识符回退)仍有效。 quotation
platform-readings.md 257 写侧 · issue body:落库删字节,网页同显;sanitizer 按 tag 形状删,不按尖括号。 new
platform-readings.md 258 行内反引号里的 tag 形状 token 整个被删,含注释标记、占位符、泛型这些未知标签形。 new
platform-readings.md 259 HTML 注释形状标记裸写被整删留空行;孤立的行内尖括号与非 tag 形状带尖括号正则存活。 new
platform-readings.md 260 ⛔ 围栏不防护:照删、留空围栏。 new
platform-readings.md 261 另一坑:感叹号紧跟左方括号即触发(TS 非空断言下标),无需尖括号。 new
platform-readings.md 262 围栏与行内代码同样丢字符,幸存文本仍像代码但意义已变;感叹号不接左方括号则存活。 new
platform-readings.md 263 作者侧:运算符用词拼出,或占位词定义一次。 new
platform-readings.md 264 写侧 · 评论是截断不是删片段:sanitizer 从首个命名 HTML 元素的尖括号片段起吃到结尾。 new
platform-readings.md 265 JSON 因此不可解析 ⇒ ⛔ 字面文本标记只保住标记:标记扫描照报成功,真去解析才发现。 new
platform-readings.md 266 引信是普通 TS 形状如泛型,不是奇异语法。 new
platform-readings.md 267 边界:姊妹仓一次受控探针测到的是选择性删除而非截断到尾 ⇒ 写侧按最坏的截断防护。 new
platform-readings.md 268 写侧 · PR 正文:尾部横线与其后的署名页脚一并被吃,而写调用照报成功。 new
platform-readings.md 269 去掉横线只写页脚则原样存活;评论不受影响,两种拼法都活。 new
platform-readings.md 270 ⇒ 失效既依拼写又依载体:评论里验过页脚对 PR 正文什么都没证明。 new
platform-readings.md 271 ⇒ PR 正文页脚不带前置横线,且写后回读正文 —— 那是唯一检测手段;评论两形皆可。 new
platform-readings.md 272 署名页脚的写侧变异按通道与输入双重定域,⛔ 不是一条定律。 new
platform-readings.md 273 MCP update_pull_request 包装器删掉 PR 正文的页脚块。 new
platform-readings.md 274 裸 REST PATCH /pulls 追加一个裸页脚并保留既有 session-URL 页脚,差恰 58 字节。 new
platform-readings.md 275 同一 MCP 包装器上有反例:把已带页脚的正文整体重送,两条页脚均逐字节存活。 new
platform-readings.md 276 提出的机理是工具只为无页脚的正文合成页脚 —— ⛔ 未实测,⛔ 不把观察压成定律。 new
platform-readings.md 277 第四形:裸 REST POST /pulls 建 PR 时,在已带 session-URL 页脚的正文后再追加一条同形页脚。 new
platform-readings.md 278 该追加带前置横线、恰 90 字节,送出体是存储体的严格前缀。 new
platform-readings.md 279 ⇒ 追加形态随通道与动作(建 / 改)变,⛔ 不由任一条推其余;写后必回读。 new
platform-readings.md 280 评论创建两通道都追加 58 字节 ⇒ 严格解析 os-dev-report 必须停在最后一个右花括号。 new
platform-readings.md 281 并行 spec PR 同动 pin 计数断言:被踢不是事故,按 os-regen 序再解一轮。 narrative
platform-readings.md 282 解冲突两侧收据都保留、按合并顺序堆叠;新计数从合并后源码重数,⛔ 不从收据做算术。 narrative
platform-readings.md 283 操作数是文件本身不是历史;双方占同一编号是常态,重编号后进侧。 narrative
platform-readings.md 284 容器重启杀死在飞 dev,三态 ①:分支已推加 PR 已开 ⇒ 只欠验收,CI 重跑加复核,不动代码。 new
platform-readings.md 285 ②:死在 regen 中途(未提交全是生成物、merge commit 已在)⇒ PM 直接续作。 new
platform-readings.md 286 续作序:build,整链 regen,生成物门禁全绿,提交推送;恢复 commit 带 Recovery commit: 前缀。 new
platform-readings.md 287 有的现场 regen 一件没跑,推送前先跑生成物门禁别赌。 new
platform-readings.md 288 ③:死在源码编辑中途 ⇒ 先读 diff 判完整性:docblock 写全动机与判据的可代跑终验后提交。 new
platform-readings.md 289 写一半意图不明的 ⛔ 不代提交,记交接;dev 临时目录(.os-scratch/ 一类)清掉,⛔ 不进 PR。 new
platform-readings.md 290 零提交的探针分支不是在飞工作:容器发不出分支删除 refspec。 new
platform-readings.md 291 git push origin --delete b 回 send-pack: unexpected disconnect,三次退避全败,同会话普通 push 正常。 narrative
platform-readings.md 292 ⇒ 测量型派发留下的探针分支永久堆在 origin 上。 new
platform-readings.md 293 判据两读:git rev-list --count origin/main..origin/b 为 0,且分支名下无 open PR。 new
platform-readings.md 294 ⛔ 不据 ls-remote | grep issue- 正命中回避该卡:失效方向是活卡被读成已认领,无红信号。 new
platform-readings.md 295 会话从上下文检测不到自己的静默降档:横幅只在 UI 侧渲染,上下文零信号。 new
platform-readings.md 296 服役档的权威读数是 get_session(claude-code-remote MCP,无参)的 external_metadata.last_served_model date + quotation + marker
platform-readings.md 297 它是最近一轮服役者,降档链中途照真;session_context.model 是配置档,⛔ 不作保险丝输入。 new
platform-readings.md 298 该读数按宿主分叉:有的宿主的 get_session 按契约排除当前会话 ⇒ 保险丝无输入。 new
platform-readings.md 299 ⛔ 不据一台宿主推全体;替代读数用时在卡上申报。 new
platform-readings.md 300 无它时的合法替代 = grep 本会话 transcript 里 harness 写的 "model":,逐请求写入、非自述。 new
platform-readings.md 301 档位额度终止是第三种死法:子代理死在编辑中途、宿主报本账户档位额度到顶。 date + marker
platform-readings.md 302 有宿主信号故非普通子代理死亡,亦非维护者中止 ⇒ 派发已死、前提完好、卡在资源。 date + marker
platform-readings.md 303 处置 = 死认领回收加 worktree 抢救,⛔ 不重核前提、不升级。 new
platform-readings.md 304 无前置探针,只在 dev 死在里面时可观测;缓解只在 dev 侧的早 WIP 提交。 date + marker
platform-readings.md 305 档位不可用时 ⛔ 不凭记忆宣告车道阻塞,逐文件面现推 mandate。 new
platform-readings.md 306 强制档不得因不可用而降档 —— 那正是降档保险丝要拒的替换。 new
platform-readings.md 307 本车道强制多是过宽的回忆:dispatch-gates.mjs --tier PATH 逐路径现推,路径线是下限非放行。 new
platform-readings.md 308 该脚本只答自己那棵树:姊妹仓路径回 absent from this tree,姊妹仓的档位与条款②只能手推。 new
platform-readings.md 309 required checks 的名单是每仓事实,objectstack 六个: TypeScript Type Check · Lint & Repo Gates · Test Core · Dogfood Regression Gate · Build Core · Temporal Conformance (live PG + MySQL) quotation
platform-readings.md 310 in_progress 不是过;advisory 门禁红进 main 是共享损伤,照样止血立单。 new
platform-readings.md 311 ⛔ 聚合命令同样不作判定:check:type-check-debt 可在包级 typecheck 绿时红。 new
platform-readings.md 312 check:i18n 以 PREREQUISITE NOT MET(workspace CLI 未 build)退 3,不是漂移。 new
platform-readings.md 313 计数非机理读数:由 GET .../actions/runs?event=merge_group 计数 0 推 required 集为空,当天被推翻。 date + quotation + marker
platform-readings.md 314 计数答至今发生过没有,不答机制在不在:零计数只作弱先验。 new
platform-readings.md 315 判 required 集为空要读 ruleset 的 required 集本身,或看队列合并是否真在等检查。 date + quotation + marker
platform-readings.md 316 ⛔ 别处写下的计数值一律先复测再用。 new
platform-readings.md 317 PR 正文里不修某卡的否定句照样关卡:解析器不理会前面的否定词。 new
platform-readings.md 318 关键词集 = fix/fixes/fixed/close/closes/closed/resolve/resolves/resolved#N quotation
platform-readings.md 319 声明不修的那句话恰在合并时关卡;安全写法是号码不被关键词打头。 new
platform-readings.md 320 三种安全拼法:#N is not addressed here / out of scope: #N / #N remains open quotation
platform-readings.md 321 边界三条 ①:关键词只绑同一行的 #N。②:动名词 closing 与 fixing 不是关键词。 new
platform-readings.md 322 ③:行内反引号里的关键词不触发,code span 不建闭合链接;围栏块未实测,按同规则对待。 new
platform-readings.md 323 PR body 与 squash commit message 是两个独立解析源:commit 干净不等于 body 干净,只查 commit 会漏。 quotation
platform-readings.md 324 误关的卡以 completed 状态对一切只看 open 的过滤与巡检隐身,无机械守卫覆盖这条路径。 quotation
platform-readings.md 325 消费侧检查 = 合并后读 closed_by_pull_requests,在复核清单里。 quotation
platform-readings.md 326 原则、定时器选型与恢复 playbook 在主文件;本节只放事实补遗。 narrative
platform-readings.md 327 npx ccusage blocks 容器内可用,读本地会话记录,报当前 5 小时窗口边界、剩余与燃烧率。 merged
platform-readings.md 328 盲区:窗口起点是本地推断的近似值。 narrative
platform-readings.md 329 撞墙报文形如 limit reached, resets at HH:MM,重置时刻只在此刻可得。 quotation
platform-readings.md 330 agent 建的 Routine 起的会话不带 mcp__github__* 工具 ⇒ 对以 GitHub 读写为工作的席位不可用。 date + quotation + marker
platform-readings.md 331 创建端现有 connectors 参数,声明起的会话可用哪些连接器 ⇒ 成因有了参数级解法。 new
platform-readings.md 332 ⛔ 未实测,⛔ 不据参数在场推现在能用了。 new
platform-readings.md 333 自绑唤醒的是已存在的会话、工具已加载 ⇒ 上条的传输问题不发生。 new
platform-readings.md 334 代价是拿可恢复性换工具可得性:绑定会话一死,定时器成孤儿、每小时唤醒死会话。 new
platform-readings.md 335 ⇒ 绑定会话一死:先删旧 Routine、再从新会话重建,⛔ 永不留孤儿。 new
platform-readings.md 336 自绑是性能优化,保住一条 prompt-cache 链,⛔ 不是状态存储;删了重建零成本。 narrative
platform-readings.md 337 创建端无 sources、无 model 参数 ⇒ 建不出带源或钉死档位的 Routine,起的会话落默认档。 date + quotation + marker
platform-readings.md 338 更新端带 model,但只有每次起新会话的 Routine 吃得到。 new
platform-readings.md 339 自绑的保持所绑会话的档位直到绑定解除 ⇒ ⛔ 不据更新端能改档推自绑的档位可改。 new
platform-readings.md 340 UI 建的 Routine agent 改不动:更新端只受理自己建的。 new

Generated by Claude Code

@github-actions github-actions Bot added size/xl documentation Improvements or additions to documentation labels Sep 5, 2026
@claude
claude Bot requested review from hotlong and os-zhuang September 5, 2026 01:25
@os-zhuang
os-zhuang marked this pull request as ready for review September 5, 2026 01:27
@os-zhuang
os-zhuang enabled auto-merge September 5, 2026 01:27
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 5, 2026

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

ACCEPT — governed in-seat review of PR #15641, head ddf47bdd7 (skills seat, 2026-09-05T01:5xZ). Posted after os-zhuang's approval and enqueue (01:27Z / 01:44Z); the review record is owed regardless, and nothing here changes the PR's state.

Implemented-by: claude/issue-15379-readings-lanes-rules-only (os-dev subagent, #15379 member 3)
Reviewed-by: session_019RfFHiRCSs3JXLK4cwcfox (skills seat)

Verified in a detached compare worktree at the PR head against merge-base 6b8c67778, not from the report: exactly the ruled surface — the readings ledger, the REST table, the eight lane job descriptions, release-aftercare / true-green / compile-surfaces, plus their 13 CEILINGS rows (14 files, +780 / −800). Every landed count is at or below today's and every row is re-pinned down (ledger 397 → 359, REST table 88 → 82, aftercare 58 → 50, true-green 34 → 32, compile-surfaces 26 → 24, lanes 40 → 32 · 28 → 27 · 31 → 29 · 39 → 38 · 35 → 33 · 46 → 43 · 57 → 53 · 77 → 72); table-row pins untouched, compile-surfaces keeps its nine table rows at the 352 pin. Hygiene census on the head over all thirteen: dates 0, corner quotes 0, issue ids 0, non-table lines over 120 bytes 0, model names 0, frame fingerprints 0, ⚠/⭐ 0. The four folded readings are present as fact lines (the list_issues union with the inclusion–exclusion workaround and the REST-AND contrast; the proxy-credentialed egress with the 15000 core limit and the overridden Authorization header; the update-branch route with the full-SHA and 422 rules plus the CONNECT-403 job-log refusal and the annotations endpoint; the stored merge method with the branch rule governing), and the clause-② checker's 403 reading is restated as its current reading. Gates re-run by the seat on the head: check-skill-line-ratchet exit 0 (60 ✓ lines, "declared cross-file moves: 1, total ceilings down 9 lines"), its self-test 155 cases, check-skill-frame-sync isomorphic, check-skill-id-lint 24 files clean, check-governed-merges --test exit 3 (GOVERNED, 13 of 14 on the register). CI on ddf47bdd7: 35 check runs, 23 success, 12 skipped, none failing.

One change outside the 13 rows, accepted with the gate's own reasoning: the ledger's third-increment raise record (delta: 39) is retired. The dev measured that the cross-file move bookkeeping does not stay green when the destination is lowered (two raise records totalling 73 over-claimed against a destination now 45 above its pre-move ceiling), applied the gate's prescribed remedy, and check-ratchet-remedy-authority plus the ratchet self-test pass on the result; the intake record and the sources map are untouched. The PR body carries the four ruled tables (part B of Table 1 in the first PR comment), and the dev's out-of-scope finding is filed as #15652 (the six required check-run names are restated in the ledger, which check-required-contexts does not scan) — left for triage.

Landing regime: governed (.claude/**); the human step has been taken by an approver. Closes #15121, #15525, #14928, #15481; Part of #15379 (the family card stays open for members 4 and 5 and the re-lock pass).


Generated by Claude Code

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Sep 5, 2026
…le and lanes

Two sibling rules-only PRs landed on main and re-pin rows in the same ratchet
map this branch edits, which is what turned the PR dirty in the queue.

One conflicted file, two hunks, both resolved by keeping BOTH sides — the map
is a list of independent rows and the two branches move disjoint ones:

  scripts/pm/check-skill-line-ratchet.mjs
    hunk 1: ours rest-channel.md 88 -> 82 (with its note) kept, and theirs
            review-checklist.md 84 -> 77 and landing-operations.md 80 -> 69
            (with their notes) kept
    hunk 2: ours release-aftercare.md 58 -> 50 (with its note) kept, and
            theirs seat-post-protocol.md 105 -> 91 (with its note) kept

Everything the automatic merge already took is unchanged: their SKILL.md
1005 -> 811, dispatch-runbook 280 -> 241, state-machine 44 -> 42,
contract-review 68 -> 60, decision-analysis 54 -> 50 and the SKILL.md
widest-table-row pin 642 -> 342; our remaining eleven rows and the retired
third-increment ruled-raise record on the cross-file move.

The thirteen markdown files this branch rewrites are byte-identical to the
pre-merge commit — main touched none of them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
@claude

claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

Merged origin/main after the queue ejection.

  • merge commit 4008475c8 — first parent ddf47bdd7 (this branch), second parent fa125f3bf (origin/main, the base merged in). A real merge commit: no rebase, no force-push, no history rewrite.
  • Conflicted files: one. scripts/pm/check-skill-line-ratchet.mjs, two hunks, both resolved by keeping both sides — the CEILINGS map is a list of independent rows and the two branches move disjoint ones.
    • hunk 1: kept ours rest-channel.md 88 to 82 with its note, and theirs review-checklist.md 84 to 77 and landing-operations.md 80 to 69 with theirs.
    • hunk 2: kept ours release-aftercare.md 58 to 50 with its note, and theirs seat-post-protocol.md 105 to 91 with theirs.
    • taken by the automatic merge and left alone: their SKILL.md 1005 to 811, dispatch-runbook.md 280 to 241, state-machine.md 44 to 42, contract-review.md 68 to 60, decision-analysis.md 54 to 50, and the SKILL.md widest-table-row pin 642 to 342. Our other eleven rows and the retired third-increment ruled-raise record are unchanged.
  • The thirteen rewritten markdown files: no conflict and no change. git diff ddf47bdd7 -- over all thirteen is empty; main touched none of them.

Gates re-run on the merged head, each exit code captured before any pipe:

gate exit its own verdict line
pnpm check:pm-skill-ratchet 0 check-skill-line-ratchet self-test: 155 cases pass.; all thirteen rows at headroom 0 (359, 82, 50, 32, 24, 29, 38, 72, 32, 53, 27, 33, 43); cross-file move into platform-readings.md: +11 (314 to 359, less 34 lines of ordinary ruled raise) against a net source decrease of 20; declared cross-file moves: 1, total ceilings down 9 lines.
pnpm check:skill-frame-sync 0 2 copies of the decision frame are structurally isomorphic across 2 files
pnpm check:pm-skill-id-lint 0 24 file(s) clean (pattern /#[0-9]{3,}/g).
pnpm check:pm-governed-prose 0 2 instruction surface(s) name all 5 registered governed surfaces … and claim no others.
node scripts/check-required-contexts.mjs 0 6 required context name(s) pinned across 2 workflow(s); 5 instruction surface(s) scanned against 2 retired name(s).

Because the merge re-touched the ratchet script, its dependants were re-run too — check-published-list-mirrors, check-ratchet-remedy-authority, check-skills-token-ratchet, check:nul-bytes — all exit 0. dispatch-gates re-derived against the new merge base fa125f3bf still reads exactly the same 14 paths.

Dedup re-checked against the landed siblings, not the PR heads. SKILL.md, core-rules.md and the seven references on main are byte-identical to the heads this branch deduped against (66338b6a, 6000e270), so nothing shifted; a fresh normalised scan of the thirteen files against all nine landed siblings finds 0 verbatim rule-line overlap over 1,273 indexed sibling lines.

CI on 4008475c8: 30 check runs, all completed — 22 success, 8 skipped, 0 failure. Of the six required contexts, Lint & Repo Gates, TypeScript Type Check, Test Core and Dogfood Regression Gate are success; Build Core and Temporal Conformance are skipped by their path filters. The PR now reads mergeable: true, mergeable_state: clean.

Draft/ready state untouched by this seat, and the PR was not re-enqueued — a governed PR is re-enqueued by the approver, not by a seat.

Generated by Claude Code


Generated by Claude Code

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

Merge commit verified — the ACCEPT above (5548531654) extends to head 4008475c8; @os-zhuang, this PR is ready to be re-enqueued (skills seat, 2026-09-05T02:5xZ).

What happened: the queue removed this PR at 02:22Z as dirty after PR #15460 and PR #15485 landed with their own re-pinned rows in scripts/pm/check-skill-line-ratchet.mjs. The dev merged origin/main (fa125f3bf) into the branch as a real merge commit — no rebase, no force-push — and resolved the one conflicting file by keeping both sides.

Verified in a detached compare worktree at 4008475c8, not from the report: the thirteen rewritten files are byte-identical to the approved head ddf47bdd7 (git diff --stat ddf47bdd7 4008475c8 over them is empty); the only content the merge brought in is main's own — the rewritten seven references and core-rules.md from member 1b/2; the ratchet map carries both sides' rows (SKILL.md 811 · the seven at 241 / 42 / 60 / 50 / 77 / 69 / 91 · the thirteen at 359 / 82 / 50 / 32 / 24 / 32 / 27 / 29 / 38 / 33 / 43 / 53 / 72 · core-rules 150) with the table-row pins intact. Gates on the merge head: check-skill-line-ratchet exit 0 (60 ✓ lines), its self-test 155 cases, check-skill-frame-sync isomorphic, check-skill-id-lint 24 files clean. CI on 4008475c8: 30 check runs, 22 success, 8 skipped, none failing; mergeable_state: clean.

The approval on ddf47bdd7 still stands on the PR; the seat never enqueues a governed PR, so the re-add to the merge queue is the approver's act. Nothing else changes: still Part of #15379, closes #15121 · #15525 · #14928 · #15481.


Generated by Claude Code

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

Re-enqueue request — skills seat (session session_019RfFHiRCSs3JXLK4cwcfox, os-steve), 2026-09-05T10:1xZ. @os-zhuang @hotlong: this PR has been approved since 03:2xZ, reads mergeable_state: clean on head 4008475c8 (the dev's merge of main after the queue dropped it as dirty at 02:22Z; the thirteen rewritten files byte-identical to the approved head, one ratchet-map conflict resolved keeping both sides), CI green, and has not been re-enqueued in the six and a half hours since. Behind it: #15671 and #15647 section 1 are hard-serial on its files, and #15121 · #15525 · #14928 · #15481 close with it. The seat never enqueues a governed PR; one approver's click lands it.


Generated by Claude Code

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

维护者速读(skills 席,2026-09-05T13:2xZ)

改了什么:pm-dispatch 的 13 个参考文件(平台读数账本、REST 通道表、发版善后、true-green、编译面,以及 8 个车道职责文件)只留规则,+780 / −800 行;每个文件的行数上限按落地值重新钉死,只降不升。

为什么改:同一条 9-4 裁定;这是「skills 只留规则」计划的第 3 个成员,成员 1b、2、4 已落地,成员 5 在 #15856

风险与代价:纯 PM 席位内部文档,不碰产品代码。os-zhuang 03:2xZ 已批准;02:22Z 曾因 main 变动被队列剔除,dev 已合入 main,13 个文件与批准版本字节相同,CI 绿。此后 10 小时没人重新入队。

席位意见:建议入队。落地后解锁两张卡(#15671 分诊车道职责、#15647 四条账本行)并关闭四张 finding(#15121 · #15525 · #14928 · #15481)。

你要做的:点「入队」(已批准,只差这一下)。


Generated by Claude Code

@os-zhuang
os-zhuang added this pull request to the merge queue Sep 5, 2026
Merged via the queue into main with commit abe980c Sep 5, 2026
35 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-15379-readings-lanes-rules-only branch September 5, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment